Introduction
Welcome to Scrap.io API! You can use this API to access all our API endpoints, such as the Gmap Search API to search on Google Maps, or the Gmap Enrich API to look up Google Maps information related to a domain name, an email or a phone.
The API is organized around REST. All requests should be made over SSL. All request and response bodies, including errors, are encoded in JSON.
We also have some specific language examples to make integration easier. You can switch the programming language of the examples with the tabs in the top right.
The base url for all endpoints is:
https://scrap.io/api/v1/
Authentication
To authorize, use this code:
curl -G 'api_endpoint_here' \
-H 'Authorization: Bearer xxxxxxxxxx'
$url = 'api_endpoint_here';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'api_endpoint_here'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
response = HTTParty.get(url, headers: headers)
json = JSON.parse(response.body)
import requests
import json
url = 'api_endpoint_here'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
response = requests.get(url, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'api_endpoint_here'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
axios.get(url, { headers: headers })
.then((response) => {
const json = response.data;
});
Make sure to replace
xxxxxxxxxxwith your API key.
Scrap.io uses API keys to allow access to the API. You can create a new API key in your security options.
Scrap.io expects for the API key to be included in all API requests to the server as bearer token in a header that looks like the following:
Authorization: Bearer xxxxxxxxxx
Subscription
curl -G 'https://scrap.io/api/v1/subscription' \
-H 'Authorization: Bearer xxxxxxxxxx'
$url = 'https://scrap.io/api/v1/subscription';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/subscription'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
response = HTTParty.get(url, headers: headers)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/subscription'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
response = requests.get(url, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/subscription'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
axios.get(url, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"plan": "Partner plan",
"active": true,
"on_trial": false,
"pending_cancelation": false,
"renewal_date": "2022-08-05T15:13:18.000000Z",
"features": {
"EXPORT_CREDITS": {
"name": "Export credits",
"consumed": 0,
"remaining": 100000,
"total": 100000
},
"SCRAPING_SPEED": {
"name": "Scraping speed",
"value": "Very high"
},
"SEARCH_CITY": {
"name": "Search by city",
"value": true
},
"SEARCH_ADMIN2_CODE": {
"name": "Search by level 2 division",
"value": true
},
"SEARCH_ADMIN1_CODE": {
"name": "Search by level 1 division",
"value": true
},
"SEARCH_WHOLE_COUNTRY": {
"name": "Search on whole country",
"value": true
},
"ESSENTIAL_SEARCH_FILTERS": {
"name": "Essential search filters",
"value": true
},
"ADVANCED_SEARCH_FILTERS": {
"name": "Advanced search filters",
"value": true
},
"GMAP_EXPORT_ADDITIONAL_FIELDS": {
"name": "GMap additional fields in exports",
"value": true
},
"WEB_EXPORT_ADDITIONAL_FIELDS": {
"name": "Website additional fields in exports",
"value": true
},
"API_ACCESS": {
"name": "API Access",
"value": true
}
}
}
Get subscription details and remaining credits.
HTTP Request
GET https://scrap.io/api/v1/subscription
GMap
Types
curl -G 'https://scrap.io/api/v1/gmap/types' \
-H 'Authorization: Bearer xxxxxxxxxx' \
-d "search_term=boulang" \
-d "locale=fr"
$url = 'https://scrap.io/api/v1/gmap/types';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$params = [
'search_term' => "boulang",
'locale' => "fr",
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url . '?' . http_build_query($params));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/gmap/types'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
params = {
'search_term' => "boulang",
'locale' => "fr",
}
response = HTTParty.get(url, headers: headers, query: params)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/gmap/types'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
params = {
"search_term": "boulang",
"locale": "fr",
}
response = requests.get(url, params=params, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/gmap/types'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
const params = {
'search_term': "boulang",
'locale': "fr",
}
axios.get(url, { params: params, headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
[
{
"id": "bakery",
"text": "Boulangerie"
},
{
"id": "wholesale-bakery",
"text": "Grossiste en boulangerie"
},
{
"id": "bakery-equipment",
"text": "Équipement pour boulangerie"
}
]
This endpoint allows you to search a Gmap type and get its id. Then you can use it in Gmap search endpoint.
You can search in any language (en and fr for now).
HTTP Request
GET https://scrap.io/api/v1/gmap/types
Query Parameters
| Parameter | Default | Required | Description |
|---|---|---|---|
| search_term | no | Term to search for | |
| locale | en | no | Search locale |
Locations
curl -G 'https://scrap.io/api/v1/gmap/locations' \
-H 'Authorization: Bearer xxxxxxxxxx' \
-d "country_code=us" \
-d "type=admin1" \
-d "search_term=New"
$url = 'https://scrap.io/api/v1/gmap/locations';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$params = [
'country_code' => "us",
'type' => "admin1",
'search_term' => "New",
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url . '?' . http_build_query($params));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/gmap/locations'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
params = {
'country_code' => "us",
'type' => "admin1",
'search_term' => "New",
}
response = HTTParty.get(url, headers: headers, query: params)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/gmap/locations'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
params = {
"country_code": "us",
"type": "admin1",
"search_term": "New",
}
response = requests.get(url, params=params, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/gmap/locations'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
const params = {
'country_code': "us",
'type': "admin1",
'search_term': "New",
}
axios.get(url, { params: params, headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
[
{
"id": "NH",
"text": "New Hampshire",
"type": "admin1",
"parent_country": "US",
"parent_admin1": null,
"parent_admin2": null
},
{
"id": "NJ",
"text": "New Jersey",
"type": "admin1",
"parent_country": "US",
"parent_admin1": null,
"parent_admin2": null
},
{
"id": "NM",
"text": "New Mexico",
"type": "admin1",
"parent_country": "US",
"parent_admin1": null,
"parent_admin2": null
},
{
"id": "NY",
"text": "New York",
"type": "admin1",
"parent_country": "US",
"parent_admin1": null,
"parent_admin2": null
}
]
This endpoint allows you to search for locations (admin1, admin2 or city) and retrieve its ids.
You can list all the admin1 areas in one country, all the admin2 areas in one admin1 area, search a city inside a country, etc.
Then, you can use the ID in the gmap search endpoint.
HTTP Request
GET https://scrap.io/api/v1/gmap/locations
Query Parameters
| Parameter | Default | Required | Description |
|---|---|---|---|
| country_code | yes | 2 letters (ISO 3166-1 alpha-2) country code (FR, US, etc.) | |
| type | yes | Type of entity to search for (admin1, admin2, city) | |
| admin1_code | no | Admin 1 code (if you want to restrict to a specific admin 1 division) | |
| admin2_code | no | Admin 2 code (if you want to restrict to a specific admin 2 division) | |
| search_term | no | Term to search for |
Place
curl -G 'https://scrap.io/api/v1/gmap/place' \
-H 'Authorization: Bearer xxxxxxxxxx' \
-d "google_id=0x89c258e41a5508a1:0xb7f3b3480a81d211"
$url = 'https://scrap.io/api/v1/gmap/place';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$params = [
'google_id' => "0x89c258e41a5508a1:0xb7f3b3480a81d211",
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url . '?' . http_build_query($params));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/gmap/place'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
params = {
'google_id' => "0x89c258e41a5508a1:0xb7f3b3480a81d211",
}
response = HTTParty.get(url, headers: headers, query: params)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/gmap/place'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
params = {
"google_id": "0x89c258e41a5508a1:0xb7f3b3480a81d211",
}
response = requests.get(url, params=params, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/gmap/place'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
const params = {
'google_id': "0x89c258e41a5508a1:0xb7f3b3480a81d211",
}
axios.get(url, { params: params, headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"meta": {
"found": true,
"status": "completed"
},
"data": {
"google_id": "0x89c258e41a5508a1:0xb7f3b3480a81d211",
"name": "Hemingway African Gallery",
"types": [
{
"type": "art-gallery",
"is_main": true,
"deleted": false
}
],
"is_closed": false,
"is_temporarily_closed": false,
"descriptions": [
"Hemingway African Gallery’s art collection is ethically-sourced, often directly from artisans across the continent, and ranges from antique to decorative. This allows Hemingway to represent the broader art of Africa, offering accessible pieces to non-collectors. While the African art industry continues to buzz, this family-run NYC gallery has quietly become one of the largest importers of African art in the city.\nThe new street-level gallery at 88 Leonard St. brings African art, design, travel, and wildlife conservation under one roof to present visitors with a vision of the gallery’s next chapter as a destination for African aesthetics in the heart of Tribeca."
],
"website": "http://www.hemingwaygallery.com",
"phone": "(212) 838-3650",
"phone_international": "+12128383650",
"timezone": "America/New_York",
"location_full_address": "Hemingway African Gallery, 88 Leonard St, New York, NY 10013",
"location_borough": "Manhattan",
"location_street_1": "88 Leonard St",
"location_street_2": "88 Leonard St",
"location_city": "New York",
"location_postal_code": "10013",
"location_state": "New York",
"location_latitude": 40.7169591,
"location_longitude": -74.004565,
"location_country_code": "US",
"location_admin1_code": "NY",
"location_admin2_code": "061",
"other_places_at_this_location": [],
"link": "https://www.google.com/maps/preview/place/Hemingway+African+Gallery,+88+Leonard+St,+New+York,+NY+10013/@40.7169591,-74.004565,3024a,13.1y/data=!4m2!3m1!1s0x89c258e41a5508a1:0xb7f3b3480a81d211",
"place_id": "ChIJoQhVGuRYwokREdKBCkiz87c",
"cid": "13255135250276798993",
"mid": "/g/1v6p563b",
"owner_name": "Hemingway African Gallery",
"owner_id": "111154583307361228521",
"price_range": null,
"business_reported_price_range": null,
"customer_reported_price_range": null,
"customer_reported_price_range_detailed": null,
"customer_reported_price_range_currency": null,
"reviews_id": "-5191608823432752623",
"reviews_count": 17,
"reviews_rating": 4.6,
"reviews_per_score": {
"1": 1,
"2": 0,
"3": 0,
"4": 2,
"5": 14
},
"reviews_tags": {
"african-art": 2,
"sculpture": 2,
"staff": 3
},
"reviews_highlighted": [
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChdDSUhNMG9nS0VJQ0FnTUR3cEticDJ3RRAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgMDwpKbp2wE%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2025-03-23T00:00:00.000000Z",
"author": {
"name": "John doti",
"profile_link": "https://www.google.com/maps/contrib/114306862327427682240?hl=en-US"
},
"comment": "Casual stroll with relatives turned out to be an unforgettable experience. Noticed wonderful African art from the street and stopped in to meet Brian…. A warm and knowledgeable person who took the time to explain the pieces and even hooked my 7 year up with some polished rocks for his collection. Great find, check it out",
"detailed_experience": [],
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ANxoTn34Dfvrr3VkcYCfROz1xBm-XI8_8qxb-s1mdDY0yA4qzgvGGfvY1UJviw5qi-ZsgSBq8JMeku_7b5zYgxjnOtMUFichW-d0ZWC1EbifnbN1CmKUVaaIvgTbxQxA9wzn_f8Tdffx=k-no"
]
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnSUQ5dXNIVE9BEAE!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgID9usHTOA%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2024-03-15T00:00:00.000000Z",
"author": {
"name": "Alexi Assmus, PhD",
"profile_link": "https://www.google.com/maps/contrib/111349333733816284417?hl=en-US"
},
"comment": "Logan, Tucker and their Dad Brian run a wonderful family business with stunning African art of all sizes (sculptures like the Shona woman pictured here, smaller tabletop items, jewelry) and African safari tours run by Tucker. Zimbabwe, Uganda, …. The Manhattan art gallery is now almost 50 years old.\n\nLogan and Tucker brought the piece we purchased turn our home and helped site it perfectly.\n\nThank you and we hope to travel with them in the not so distant future.",
"detailed_experience": [],
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ANxoTn3nD57PDdAY-yzxDu4oYpqDdFHHKdKdwUitWwp8z0MTQ6CyGG7rgohsFKKjNR4fC0uT5Ap5TYIoLUht8DuwUauVKdh4zwhxrsoLT0ginyaT8izYq9MRuPjKC8RWylM9UX6WIpjjJQ=k-no"
]
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT25wamQxcEhjV1JxWkd0ZllUQlpWVEp1UW1WWlNuYxAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CAIQACodChtycF9oOnpjd1pHcWRqZGtfYTBZVTJuQmVZSnc%7C%7C?hl=en-US",
"rating": 1,
"publication_date": "2025-09-14T00:00:00.000000Z",
"author": {
"name": "Benita Diop",
"profile_link": "https://www.google.com/maps/contrib/112424659987503259755?hl=en-US"
},
"comment": "Stopped by for the first time the shop keeper was very strange I practically had to beg for help and a conversation about his findings then he just got on the phone in the middle of our conversation and never got off till I left. I can tell he was treating me weird based on his bias which is oddly ironic",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChdDSUhNMG9nS0VJQ0FnSUN1LV9tdC1nRRAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgICu-_mt-gE%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2023-05-14T00:00:00.000000Z",
"author": {
"name": "Kimberley Smith",
"profile_link": "https://www.google.com/maps/contrib/104759990406294943325?hl=en-US"
},
"comment": "My dancing shield from Cameroon arrived wonderfully packaged and in perfect condition. I will absolutely order from Hemingway African Gallery again.",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnSUNpZ3RmWVlnEAE!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgICigtfYYg%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2021-05-14T00:00:00.000000Z",
"author": {
"name": "Maryam Horri",
"profile_link": "https://www.google.com/maps/contrib/109068776453790320212?hl=en-US"
},
"comment": "Excellent collection of wide range of authentic African Art. Deeply knowledgeable native African owner is interested in education, conservation and promotion of African Art and Culture. Definitely worth a visit!",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChdDSUhNMG9nS0VJQ0FnTUNndnJxVGlRRRAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgMCgvrqTiQE%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2025-02-17T00:00:00.000000Z",
"author": {
"name": "Celine",
"profile_link": "https://www.google.com/maps/contrib/114628331085119106330?hl=en-US"
},
"comment": "Awesome stuff",
"detailed_experience": [],
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ANxoTn1erzgY5KdCj7UOTwCptslJx5z8pvf3oH8BvjlgZQSIxWcKdZ2Q3zuTwqi3itM5KHiPQPSYxmmVXMs8Q2lJtVWx8c0a-1Weao7fguhq79OC1vTxfXDYCFLc0xRED1aVpkDOwHXU=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn2H4ahaFo-9tj9AyEe-G5I8F5bbKo1WHAHI36im1LE8_YC3wMc7XPWcC6DyIgB2JR2ou2t78Vkv-1iLZnWEkpYavTtJ8AAxLEZ7loBwboGGyNeyknM8j5UqIl3ZJDQSfqxJIm-cnA=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn245wVGihtV205rbGYtaN6AkvLODztd3v6mtY4VhzNZQhmbsKITsbMVVRfw055yHt5VmrjzRLSWzkMTcapcrVT7tcvhWyrOK_HsIb4xJXVBBdNL8wDgiLL2JRIMvr9rqgzOu-vN=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn13B556aFSL3jWHNS0s-hcY_DU_6p80aZi3ZjEGNUugnMJEHRLSenmivUepEOyK02etXZ8g-lyYsrxF33OhZeMAIrYgBtCa82Ft5cwVJY5WnWwgFBaO6uahLCMkrelPqwXgH-gP=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn0lQx6ChNV4trueG90K5nKDGWn9RaustiEUx5zlTDnFpyJDkg9u-ieYLk_HAvoTDUhr1IZXYAdzUEneOqP9cXInDmuL3Gfgy9jJqzR0mziyLAvvHrzhyRD01PNCSwx74w0WxRQ=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn1oruygaPTaFT5zDZMo0IGrnmsDXLW5K_Lx7ehtnyHEzT3r3uwG5wFTFvYYR2eJGL_Y9WKxOYVsuWpfFCvwKzmA5Pic1n9pA73wgKvtfX9jCpC_CUkA5uR-W0mEv3ZLpIXzYza9QQ=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn1O4Ku-nWUEw1AxXIIMCQRSZ5-AV45Vi6mICY_UFGR04rW56XB38n_8gRX73WSS7Fl6LVhYLwZrKF4yQnnq5Ir0Rp3grYThpT6mLlP6s1BSMPrgkbmjg73_8JzpNjLclyB4G7Y=k-no"
]
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xZMGQwMVBURXBQVW01NWFHRm1hMUYwYWsxUFYzYxAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CAIQACodChtycF9oOlY0d01PTEpPUm55aGFma1F0ak1PV3c%7C%7C?hl=en-US",
"rating": 4,
"publication_date": "2026-03-14T00:00:00.000000Z",
"author": {
"name": "Lutfa Begum",
"profile_link": "https://www.google.com/maps/contrib/116045565670203265165?hl=en-US"
},
"comment": "Perfect service!",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnSUMyXzd2VUdBEAE!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgIC2_7vUGA%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2022-05-14T00:00:00.000000Z",
"author": {
"name": "Chris c",
"profile_link": "https://www.google.com/maps/contrib/102330187085865636053?hl=en-US"
},
"comment": "Obsessed with my stunning new sculpture. Will do business with Hemingway again. Thanks!",
"detailed_experience": [],
"photos": []
}
],
"photos_count": "36+",
"photos": [
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAHOEeGgVRVLxklQqFYJOlI4X_9jh6VzhZNpIgiXfxW-ujpZOvj76vFKp6vpcm-Dix1uu5tI1vjBSDCtpNN2lcNQm5TXfJS6h0Qvj_QhH0iT4rao7nlALtX4NcZzETdB2sD9k62f",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAHvXvYsBspZV9_ehigG64avURi-yEd8eTq2gPQooGhnADi9ZrIn4ywIzjQHMJpudtM6URUUkqBqIqLy1auSF2ykMqX436YB0DkB9thovdxM1pIqxO5l2CMv3GebEOYcnBJVO619",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAGL-J3WADykHMz59XT1qGj9SDzpiamViSlJQROZFvBPycHVvJO1-Qr9aLLajw4uWKIL9yId8awGtQy8FMwQLEd_TXYKV9b7OrSFcC6gr1nzTKL9-pYPzqrF0xHqyXHd5kp7OqhR",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAF0Z8e3YI30ncXz1KmAQbVGFe6k-Lon4qHVbdTnMezUtjBZzFEjCpzi6gKsQoHV7N4SoQHCNN5cs0gAOBMaF6aIEFHJPuChhI4xYY_CwycwVk-Nh-MoeTBYdfKjEy2ZEH9m_Yx5",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAGSpqMrUgpupsHxgOJm22uLekCTzEG80KcHUlA6fBLcSnIS6IdPoPiyNEZq9uw1LXxCo7pMtjy-IVdI8m1qQMyThHaDjlyF46NBfY5PHCwGpzNEmAj6NJnw9wSS4lRBvvm-V-fU8PW90HZA"
],
"photos_menu": [],
"photos_360": [
"https://streetviewpixels-pa.googleapis.com/v1/thumbnail?panoid=x9Q8-mM5JZZdX75T3U03sQ&cb_client=maps_sv.tactile.gps&w=224&h=298&yaw=259.11215&pitch=0&thumbfov=100"
],
"characteristics": {
"from-the-business": {
"identifies-as-women-owned": "identifies-as-women-owned"
},
"accessibility": {
"wheelchair-accessible-entrance": "has-wheelchair-accessible-entrance"
},
"amenities": {
"restaurant": "no-restaurant"
}
},
"occupancy": {
"monday": null,
"tuesday": null,
"wednesday": null,
"thursday": null,
"friday": null,
"saturday": null,
"sunday": null
},
"booking_links": [],
"order_links": [],
"offerings_link": null,
"hotel_infos": null,
"is_claimed": true,
"working_hours": {
"monday": "1030-am-6-pm",
"tuesday": "1030-am-6-pm",
"wednesday": "1030-am-6-pm",
"thursday": "1030-am-6-pm",
"friday": "1030-am-6-pm",
"saturday": "1030-am-6-pm",
"sunday": "11-am-5-pm"
},
"status": "completed",
"scraped_at": "2026-05-14T02:20:30.000000Z",
"first_seen_at": "2021-08-30T10:30:14.000000Z",
"website_data": {
"url": "http://www.hemingwaygallery.com",
"domain": "hemingwaygallery.com",
"is_responding": true,
"is_empty": false,
"title": "Hemingway Gallery | African Art, Masks & Shona Sculpture",
"meta_keywords": null,
"meta_description": "Shop African art, masks, furniture and Shona stone sculpture at Hemingway Gallery. Family-run since 1975, we offer one-of-a-kind works ethically sourced across Africa. Buy online or visit our gallery, open to the public in New York City.",
"meta_og_title": "Hemingway Gallery | African Art, Masks & Shona Sculpture",
"meta_og_image": "http://hemingwaygallery.nyc/cdn/shop/files/Seating-1_copy_2a3964d1-a71b-4389-97b0-fe4d5ed7555b.jpg?v=1774557859&width=2048",
"meta_generator": null,
"lang": "en",
"contact_pages": [
"http://www.hemingwaygallery.com/policies/contact-information"
],
"facebook": [
"https://facebook.com/hemingwaysafaris"
],
"youtube": null,
"twitter": null,
"instagram": [
"https://instagram.com/hemingwaysafaris"
],
"linkedin": null,
"tiktok": null,
"technologies": [
"Shopify"
],
"ad_pixels": [],
"emails": [
{
"email": "[email protected]",
"domain": "hemingwayafricangallery.com",
"category": "info-contact",
"pattern": null,
"firstname": null,
"lastname": null,
"gender": null,
"mx_provider": "google",
"is_webmail": false,
"is_disposable": false,
"has_mx": true,
"sources": [
"https://hemingwaygallery.nyc",
"https://hemingwaygallery.nyc/collections/decorative-african-art",
"https://hemingwaygallery.nyc/collections/woven-and-wire-baskets",
"https://hemingwaygallery.nyc/collections/beaded-animals-1",
"https://hemingwaygallery.nyc/collections/bowls-1",
"https://hemingwaygallery.nyc/collections/beaded-namji-dolls",
"https://hemingwaygallery.nyc/collections/bozo-fish-puppets",
"https://hemingwaygallery.nyc/collections/decorative-masks",
"https://hemingwaygallery.nyc/collections/fang-masks",
"https://hemingwaygallery.nyc/collections/guro-masks",
"https://hemingwaygallery.nyc/collections/baule-masks",
"https://hemingwaygallery.nyc/collections/movie-posters",
"https://hemingwaygallery.nyc/collections/sculpture",
"https://hemingwaygallery.nyc/collections/dancing-shields",
"https://hemingwaygallery.nyc/collections/wall-art",
"https://hemingwaygallery.nyc/collections/shona-sculpture",
"https://hemingwaygallery.nyc/collections/abstract-sculpture-1",
"https://hemingwaygallery.nyc/collections/animal-shona-sculpture",
"https://hemingwaygallery.nyc/collections/figural-sculpture",
"https://hemingwaygallery.nyc/collections/monumental-shona-sculpture",
"https://hemingwaygallery.nyc/collections/table-top-shona-sculpture",
"https://hemingwaygallery.nyc/collections/stone-bowls",
"https://hemingwaygallery.nyc/collections/antique-art",
"https://hemingwaygallery.nyc/collections/antique-masks",
"https://hemingwaygallery.nyc/collections/antique-figures",
"https://hemingwaygallery.nyc/collections/headrests"
]
}
],
"phones": [
{
"phone": "+12128383650",
"sources": [
"https://hemingwaygallery.nyc/products/beaded-zebra-south-africa-2"
]
}
],
"status": "completed",
"scraped_at": "2026-05-14T03:18:47.000000Z"
},
"blacklisted": false
}
}
This endpoint allows you to get all data related to a google place (by google_id or place_id).
HTTP Request
GET https://scrap.io/api/v1/gmap/place
Query Parameters
| Parameter | Default | Required | Description |
|---|---|---|---|
| google_id | no | Google id (ex: 0xabc:0xdef) | |
| place_id | no | Place id (ex: ChIabcDeFGhIJkLMnoPqR) | |
| skip_data | 0 | no | Boolean (0 = false or 1 = true) to indicate that you want to skip the data part of the response. When the data is skipped, it won't deduct any export credit. |
| skip_blacklist | 0 | no | Boolean (0 = false or 1 = true) to indicate that you want to skip the verification of potential blacklisted places. |
| blacklists | Verify all blacklists. | no | Array containing blacklist names. When specified, only the given blacklists will be verified. |
Search
curl -G 'https://scrap.io/api/v1/gmap/search' \
-H 'Authorization: Bearer xxxxxxxxxx' \
-d "country_code=US" \
-d "admin1_code=OH" \
-d "admin2_code=001" \
-d "city=West Union" \
-d "type=plumber"
$url = 'https://scrap.io/api/v1/gmap/search';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$params = [
'country_code' => "US",
'admin1_code' => "OH",
'admin2_code' => "001",
'city' => "West Union",
'type' => "plumber",
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url . '?' . http_build_query($params));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/gmap/search'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
params = {
'country_code' => "US",
'admin1_code' => "OH",
'admin2_code' => "001",
'city' => "West Union",
'type' => "plumber",
}
response = HTTParty.get(url, headers: headers, query: params)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/gmap/search'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
params = {
"country_code": "US",
"admin1_code": "OH",
"admin2_code": "001",
"city": "West Union",
"type": "plumber",
}
response = requests.get(url, params=params, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/gmap/search'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
const params = {
'country_code': "US",
'admin1_code': "OH",
'admin2_code': "001",
'city': "West Union",
'type': "plumber",
}
axios.get(url, { params: params, headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"meta": {
"count": "2",
"status": "completed",
"next_cursor": null,
"previous_cursor": null,
"per_page": 10,
"has_more_pages": false
},
"data": [
{
"google_id": "0x88414b46b945c89f:0xa3565f5e4dc59b77",
"name": "Flo-Thru Drain & Sewer Clning",
"types": [
{
"type": "plumber",
"is_main": true,
"deleted": false
}
],
"is_closed": false,
"is_temporarily_closed": false,
"descriptions": [],
"website": null,
"phone": "(937) 549-3775",
"phone_international": "+19375493775",
"timezone": "America/New_York",
"location_full_address": "Flo-Thru Drain & Sewer Clning, 2464 Island Creek Rd, West Union, OH 45693",
"location_borough": null,
"location_street_1": "2464 Island Creek Rd",
"location_street_2": "2464 Island Creek Rd",
"location_city": "West Union",
"location_postal_code": "45693",
"location_state": "Ohio",
"location_latitude": 38.723221,
"location_longitude": -83.5743849,
"location_country_code": "US",
"location_admin1_code": "OH",
"location_admin2_code": "001",
"other_places_at_this_location": [],
"link": "https://www.google.com/maps/preview/place/Flo-Thru+Drain+%26+Sewer+Clning,+2464+Island+Creek+Rd,+West+Union,+OH+45693/@38.723221,-83.5743849,3113a,13.1y/data=!4m2!3m1!1s0x88414b46b945c89f:0xa3565f5e4dc59b77",
"place_id": "ChIJn8hFuUZLQYgRd5vFTV5fVqM",
"cid": "11769699534815730551",
"mid": "/g/1tkp5nln",
"owner_name": "Flo-Thru Drain & Sewer Clning",
"owner_id": null,
"price_range": null,
"business_reported_price_range": null,
"customer_reported_price_range": null,
"customer_reported_price_range_detailed": null,
"customer_reported_price_range_currency": null,
"reviews_id": "-6677044538893821065",
"reviews_count": 31,
"reviews_rating": 4.5,
"reviews_per_score": {
"1": 3,
"2": 0,
"3": 1,
"4": 2,
"5": 25
},
"reviews_tags": {
"cost": 6,
"running": 2,
"rental": 2,
"drains": 2,
"calls": 2
},
"reviews_highlighted": [
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnTUN3MVBXemNBEAE!2m1!1s0x0:0xa3565f5e4dc59b77!3m1!1s2@1:CIHM0ogKEICAgMCw1PWzcA%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2025-03-16T00:00:00.000000Z",
"author": {
"name": "Mark Wiesenhahn",
"profile_link": "https://www.google.com/maps/contrib/112727225508508426384?hl=en-US"
},
"comment": "We had a leak behind the wall of our shower and also needed a toilet and 3 faucets installed. They completed the job in a very professional manner and a very fair price. They fixed the leak and all of the new faucets look great. The communication with Dusty, the owner, before and during the job was excellent. We would definitely use them again!",
"detailed_experience": [],
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ANxoTn0Qfpb6WGfBZ1sVDWA6V-bUrcUoxGsc3chdzekr3QYDJXUohWkSZslERaab7KLqeZqp1a3k92yCELbrcYAX9DUnz6_F7DizbRXlFZpFJmyTjRAtqZUzmnMi5dDOXxcK5_9D5J_Xlw=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn2gw0m6kk77c_M1VAjHzZ2sV-nYmclh-wULCsz6fdvhvCcfapHyc_4T4vgPtaMOy2yO0Aqxy4bMCXxAzQrqDoXg3_M8L2-KhgjWG0nvLSBjjrzJ4_G_HC2pyiadlhd2Y2HjosQR=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn0V9hQdqgtaryyOD6TNVe7GPLNkOZLlzFuQQytbF6jFIVv9TFLU4QILGIm-5AbSg2spaqvSzl-Gx8trAkNSzdGqw6JTFpimNLFESO67FikAJDmqSqNczLgyKWcUqG3NwPBlUIPJXA=k-no"
]
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2tZMFdHNUhWVmRyWVZOWVVtWnRjRGg2VkRjeFpYYxAB!2m1!1s0x0:0xa3565f5e4dc59b77!3m1!1s2@1:CAIQACodChtycF9oOkY0WG5HVVdrYVNYUmZtcDh6VDcxZXc%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2026-03-14T00:00:00.000000Z",
"author": {
"name": "Randy Ballinger",
"profile_link": "https://www.google.com/maps/contrib/106896935163818765643?hl=en-US"
},
"comment": "The water company called to inform me I had a major water leak at my house, at the rate of 55 gallons per day, making my monthly water bill to triple in price.\n\nI immeaditly called Flo-Thru Drain & Sewer Cleaning, to have Cory come out to find the source of my excessive water leak.\n\nMy house has a crawl space, that has about four foot tall of space at the access door, tapering of to approxmently 16\" at the other end, which is where Cory found the source of the leak, was pouring a stream of.water from under the footer of my house's foundation.\n\nAfter Cory wiggled his way out from the tiny space, of tight end of the crawl space, he located the place where my water line, from the meter, roughly about 60 foot away, from where the water line entered into my crawl space, after the line runs under the sidewalk beside that end of my house.\n\nCory told me that he would have to come back the next day with his track excuvator, so could dig up the sidewalk, to get to where the water line was run when the house was built in 1964.\n\nThe next day at noon Cory and his helper, Tommy, showed up with his mini track excuvator, and a concrete saw, to cut two sections of the sidewalk, so he could slide the two sections of concrete sidewalk away from the area where the copper water line had been run back in 1964.\n\nAfter the two sections were slid back, and the dirt was dug to about two foot deep, the leak was easily found, the water was then shut off at the meter, and a 2\" hole had to be knocked thru the footer, to run a \"patch\" water line, thru the 2\" hole on the footer, then Cory had to crawl back into that thight area of crawl space, to reconnect the \"patch\" water line, into the good water line, that supplied the rest of the house with water, while Cory was working in a space so tight, Cory couldn't change his mind",
"detailed_experience": [
{
"subject": "LOCAL_SERVICES_PRICE_QUALITY",
"type": "select-one",
"answer": {
"key": "E:LOCAL_SERVICES_PRICE_QUALITY_REASONABLE_PRICE",
"label": "Reasonable price"
}
},
{
"subject": "LOCAL_SERVICES_JOB_TYPES",
"type": "select-multiple",
"answer": [
{
"key": "job_type_id:repair_pipe",
"label": "Plumbing pipe repair"
}
]
}
],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChdDSUhNMG9nS0VJQ0FnSUNxc05xY3pnRRAB!2m1!1s0x0:0xa3565f5e4dc59b77!3m1!1s2@1:CIHM0ogKEICAgICqsNqczgE%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2021-05-24T00:00:00.000000Z",
"author": {
"name": "Mary Harper",
"profile_link": "https://www.google.com/maps/contrib/100843834855808440734?hl=en-US"
},
"comment": "Called them on a Sunday for our business. They were there Monday morning to fix our issues. Very respectful, reasonably priced, and responsive to our needs. I would highly recommend them!",
"detailed_experience": [
{
"subject": "LEGACY_SERVICES_POSITIVE_ASPECTS",
"type": "select-multiple",
"answer": [
{
"key": "E:LEGACY_SERVICES_ASPECTS_RESPONSIVENESS",
"label": "Responsiveness"
},
{
"key": "E:LEGACY_SERVICES_ASPECTS_PUNCTUALITY",
"label": "Punctuality"
},
{
"key": "E:LEGACY_SERVICES_ASPECTS_QUALITY",
"label": "Quality"
},
{
"key": "E:LEGACY_SERVICES_ASPECTS_PROFESSIONALISM",
"label": "Professionalism"
},
{
"key": "E:LEGACY_SERVICES_ASPECTS_VALUE",
"label": "Value"
}
]
},
{
"subject": "LEGACY_SERVICES_JOB_TYPES",
"type": "select-multiple",
"answer": [
{
"key": "job_type_id:unclog_drain",
"label": "Drain cleaning"
}
]
},
{
"subject": "LEGACY_SERVICES_USER_JOURNEY",
"type": "select-one",
"answer": {
"key": "E:YES",
"label": "Yes"
}
}
],
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ANxoTn3_OOOBta3Kz4X2yTGQb_ZITpooXYYjYukuusE3xGBY8cngTDkFFa1k_TpVYU59c_NStB8cmqalblBNWGDZHia9xv95Y7J3f4_YvFUVNOJ5kIq_QFZSfqBPMCtDAMZ4KFXjnRFT=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn3EqoHIOZ_6EQiajzQiXS5s-6yrmAWl5Ue0Jg2fIxUj6lu3MmwvGNCeGuqHWYxsa2yuDXk4duHG_Q_AaYgdAVPghGSE3JLjKaRs5ZahHeclLJuwrK5-djd_dQ8H9N7G-iEm33mH5w=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn36b0rA7ns0ssM8bNSVu3WX9LZzF-e0eSB0BSEPP59e6iUYVYsY7HOkb6HV5i8qNZcE9FaHlfLcZ8W9jrqPs1s2eWZRFslX3YClt5Z_b-qe6CjyXvJbEFjBDqu-5SwK7cotqQv0=k-no"
]
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnTUNBNDZQRkdBEAE!2m1!1s0x0:0xa3565f5e4dc59b77!3m1!1s2@1:CIHM0ogKEICAgMCA46PFGA%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2026-05-13T23:00:00.000000Z",
"author": {
"name": "Robbie Matthews",
"profile_link": "https://www.google.com/maps/contrib/102952278422884719752?hl=en-US"
},
"comment": "As a business owner, I needed my plumbing issues taken care of quickly.\n\nNot only was I scheduled in immediately, but the crew showed up on time, explained what was going to be done, and were very thorough and professional in answering any questions I had.\n\nI was very pleased with the work that was completed and would highly recommend them for any plumbing issues you may have.",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT21Kc2RtOUJjRUl6UW1aaVFXVTVaMHAzUnpCR05uYxAB!2m1!1s0x0:0xa3565f5e4dc59b77!3m1!1s2@1:CAIQACodChtycF9oOmJsdm9BcEIzQmZiQWU5Z0p3RzBGNnc%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2025-10-14T00:00:00.000000Z",
"author": {
"name": "Carol Cadwallader",
"profile_link": "https://www.google.com/maps/contrib/113113108363707466645?hl=en-US"
},
"comment": "I had a clogged drain and was unable to flush the toilets or run any water down the drain I called them this morning at 7:30 am they were at my home by 9:15 am and fixed the problem, very professional and friendly charged a reasonable price, I was very pleased would highly recommend their service .",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VQUGZ5NjZpdV9ILWFREAE!2m1!1s0x0:0xa3565f5e4dc59b77!3m1!1s2@1:CIHM0ogKEPPfy66iu_H-aQ%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2025-06-14T00:00:00.000000Z",
"author": {
"name": "Russ Grooms",
"profile_link": "https://www.google.com/maps/contrib/110104590171984268864?hl=en-US"
},
"comment": "I’m in the rental property business and use Flow Thru Drain Cleaning services on a regular basis. Dusty always take care of my service calls in a quick and timely manner…",
"detailed_experience": [
{
"subject": "LOCAL_SERVICES_JOB_TYPES",
"type": "select-multiple",
"answer": [
{
"key": "job_type_id:unclog_drain",
"label": "Drain cleaning"
}
]
}
],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VPalppSUNkbDZXRldREAE!2m1!1s0x0:0xa3565f5e4dc59b77!3m1!1s2@1:CIHM0ogKEOjZiICdl6WFWQ%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2025-06-14T00:00:00.000000Z",
"author": {
"name": "Justin Helvey",
"profile_link": "https://www.google.com/maps/contrib/102657772031481192990?hl=en-US"
},
"comment": "Always responsive to messages and calls and arrives in reasonable time frame. Communication comes in if they are running behind. Highly recommend.",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnSURmbGVtUFNnEAE!2m1!1s0x0:0xa3565f5e4dc59b77!3m1!1s2@1:CIHM0ogKEICAgIDflemPSg%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2026-05-13T23:00:00.000000Z",
"author": {
"name": "Jarrett Slusher",
"profile_link": "https://www.google.com/maps/contrib/112773422820423568792?hl=en-US"
},
"comment": "Great couple guys that came out and did an excellent job unclogging my drains. The price was more than fair. Would recommend them to anyone.",
"detailed_experience": [],
"photos": []
}
],
"photos_count": "6+",
"photos": [
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAERb-P01xQlKJ_kuxe_o23VTvhDsWN3wctE0Df2ovqkEizlK0xl13Gkqbl01c8_2_P4Bp9VlxcvJJ62WAQAYYvyzsJRRBH36Z_Ii1MFUpej0BtY1ttdM_Lu9hpcmfwtFoSIFEo4Bw",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAE3sTjmbx8O8bj3GImhwe-JAWhJEy79eYhYw6Ly8vu46XTg5rpDTzA-A4e2Vu_k2Ahpy95zJDWnRHeQ_UplbNxzrw0zxrvpOdKKNNPh5ge8vMLriz085nC5dsyHAkkD7Qv1iZG2",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAELg8xU-xIeNElYqCEpgXceorWH6xgulynHdEJzy3bsHlWXcbnQ6ICPcHiRjozlt0iIz3kBg6XhmNvPrsBwDnkhcsKFo78UOMjrxb7po7Qqdmeoq67e1StXfcR0psLsMtU6pGKd",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAGUQUN9culxY11FoXJ0FbCDT5NZi87k1GW9wn7kXEEWSB4yJKnX8W2PpDQBPJXCmkqSjIdhdnOSsQZD269kQYU1MBX4svWjANvi9EJ5L-RV0NJvt6vcx0wC7tpxktfB0TTVVN8e2Q"
],
"photos_menu": [],
"photos_360": [
"https://streetviewpixels-pa.googleapis.com/v1/thumbnail?panoid=O8WyUR0rPwZl84pZd6q2kw&cb_client=maps_sv.tactile.gps&w=224&h=298&yaw=140.9357&pitch=0&thumbfov=100"
],
"characteristics": {
"offerings": {
"repair-services": "has-repair-services"
},
"payments": {
"credit-cards": "accepts-credit-cards"
}
},
"occupancy": {
"monday": null,
"tuesday": null,
"wednesday": null,
"thursday": null,
"friday": null,
"saturday": null,
"sunday": null
},
"booking_links": [],
"order_links": [],
"offerings_link": null,
"hotel_infos": null,
"is_claimed": false,
"working_hours": {
"monday": "open-24-hours",
"tuesday": "open-24-hours",
"wednesday": "open-24-hours",
"thursday": "open-24-hours",
"friday": "open-24-hours",
"saturday": "open-24-hours",
"sunday": "open-24-hours"
},
"status": "completed",
"scraped_at": "2026-05-14T09:02:12.000000Z",
"first_seen_at": "2021-09-17T07:53:27.000000Z",
"website_data": {
"url": null,
"domain": null,
"is_responding": null,
"is_empty": null,
"title": null,
"meta_keywords": null,
"meta_description": null,
"meta_og_title": null,
"meta_og_image": null,
"meta_generator": null,
"lang": null,
"contact_pages": null,
"facebook": null,
"youtube": null,
"twitter": null,
"instagram": null,
"linkedin": null,
"tiktok": null,
"technologies": null,
"ad_pixels": null,
"emails": null,
"phones": null,
"status": null,
"scraped_at": null
},
"blacklisted": false
},
{
"google_id": "0x8846c9b29293c98b:0x3332b1b1d9e5c228",
"name": "Adams County Plumbing Services",
"types": [
{
"type": "plumber",
"is_main": true,
"deleted": false
}
],
"is_closed": false,
"is_temporarily_closed": false,
"descriptions": [],
"website": null,
"phone": "(937) 779-2963",
"phone_international": "+19377792963",
"timezone": "America/New_York",
"location_full_address": "Adams County Plumbing Services, 34 Staten Rd, West Union, OH 45693",
"location_borough": null,
"location_street_1": "34 Staten Rd",
"location_street_2": "34 Staten Rd",
"location_city": "West Union",
"location_postal_code": "45693",
"location_state": "Ohio",
"location_latitude": 38.8352731,
"location_longitude": -83.4662887,
"location_country_code": "US",
"location_admin1_code": "OH",
"location_admin2_code": "001",
"other_places_at_this_location": [],
"link": "https://www.google.com/maps/preview/place/Adams+County+Plumbing+Services,+34+Staten+Rd,+West+Union,+OH+45693/@38.8352731,-83.4662887,3108a,13.1y/data=!4m2!3m1!1s0x8846c9b29293c98b:0x3332b1b1d9e5c228",
"place_id": "ChIJi8mTkrLJRogRKMLl2bGxMjM",
"cid": "3689206422192898600",
"mid": "/g/1tddbjrh",
"owner_name": "Adams County Plumbing Services",
"owner_id": null,
"price_range": null,
"business_reported_price_range": null,
"customer_reported_price_range": null,
"customer_reported_price_range_detailed": null,
"customer_reported_price_range_currency": null,
"reviews_id": null,
"reviews_count": 1,
"reviews_rating": 5,
"reviews_per_score": {
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 1
},
"reviews_tags": [],
"reviews_highlighted": [
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnSUNScmFDb1dREAE!2m1!1s0x0:0x3332b1b1d9e5c228!3m1!1s2@1:CIHM0ogKEICAgICRraCoWQ%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2023-05-14T00:00:00.000000Z",
"author": {
"name": "Lisa Downing",
"profile_link": "https://www.google.com/maps/contrib/105046967944794977815?hl=en-US"
},
"comment": "Took care of my problem quickly and effectively. Reasonably priced",
"detailed_experience": [],
"photos": []
}
],
"photos_count": "0",
"photos": [],
"photos_menu": [],
"photos_360": [],
"characteristics": {
"offerings": {
"repair-services": "has-repair-services"
}
},
"occupancy": {
"monday": null,
"tuesday": null,
"wednesday": null,
"thursday": null,
"friday": null,
"saturday": null,
"sunday": null
},
"booking_links": [],
"order_links": [],
"offerings_link": null,
"hotel_infos": null,
"is_claimed": false,
"working_hours": {
"monday": "8-am-5-pm",
"tuesday": "8-am-5-pm",
"wednesday": "8-am-5-pm",
"thursday": "8-am-5-pm",
"friday": "8-am-5-pm",
"saturday": "closed",
"sunday": "closed"
},
"status": "completed",
"scraped_at": "2026-05-14T09:02:12.000000Z",
"first_seen_at": "2021-09-17T07:53:27.000000Z",
"website_data": {
"url": null,
"domain": null,
"is_responding": null,
"is_empty": null,
"title": null,
"meta_keywords": null,
"meta_description": null,
"meta_og_title": null,
"meta_og_image": null,
"meta_generator": null,
"lang": null,
"contact_pages": null,
"facebook": null,
"youtube": null,
"twitter": null,
"instagram": null,
"linkedin": null,
"tiktok": null,
"technologies": null,
"ad_pixels": null,
"emails": null,
"phones": null,
"status": null,
"scraped_at": null
},
"blacklisted": false
}
]
}
With this endpoint, you can search all the google places of a specific category in a specific location, and all their details.
We also provide powerful filters that allow you to fine-tune the search according to your needs, and get exactly the results you want.
HTTP Request
GET https://scrap.io/api/v1/gmap/search
Query Parameters
| Parameter | Type | Required | Options | Description |
|---|---|---|---|---|
| per_page | integer | no | 1, 10, 25 or 50 | Number of results per page. Default: 10 |
| skip_data | boolean | no | 0 = false / 1 = true | Indicate that you want to skip the data part of the response. When the data is skipped, it won't deduct any export credit. Default: 0 |
| skip_blacklist | boolean | no | 0 = false / 1 = true | Indicate that you want to skip the verification of potential blacklisted places. Default: 0 |
| blacklists | array | no | Array containing blacklist names. When specified, only the given blacklists will be verified. Default: Verify all blacklists | |
| cursor | string | no | Cursor pagination | |
| type | string | no | Gmap type to search for | |
| country_code | string | yes | 2 letters (ISO 3166-1 alpha-2) country code (FR, US, etc.) | |
| admin1_code | string | no | Id from this endpoint | Level 1 division for the country |
| admin2_code | string | no | Id from this endpoint | Level 2 division for the country |
| city | string | no | Text from this endpoint | City |
| postal_code | string | no | Postal code to search for | |
| gmap_is_main_type | boolean | no | 0 = false / 1 = true | Filter by main business type only |
| gmap_is_closed | boolean | no | 0 = false / 1 = true | Filter by permanently closed status |
| gmap_has_website | boolean | no | 0 = false / 1 = true | Filter by presence of website |
| gmap_has_phone | boolean | no | 0 = false / 1 = true | Filter by presence of phone number |
| gmap_is_claimed | boolean | no | 0 = false / 1 = true | Filter by claimed business status |
| gmap_price_range | string | no | $, $$, $$$, $$$$ | Filter by price level |
| gmap_reviews_rating_gte | float | no | Filter by rating greater than or equal to value | |
| gmap_reviews_rating_gt | float | no | Filter by rating greater than value | |
| gmap_reviews_rating_lte | float | no | Filter by rating less than or equal to value | |
| gmap_reviews_rating_lt | float | no | Filter by rating less than value | |
| gmap_reviews_count_gte | integer | no | Filter by number of reviews greater than or equal to value | |
| gmap_reviews_count_gt | integer | no | Filter by number of reviews greater than value | |
| gmap_reviews_count_lte | integer | no | Filter by number of reviews less than or equal to value | |
| gmap_reviews_count_lt | integer | no | Filter by number of reviews less than value | |
| gmap_photos_count_gte | integer | no | Filter by number of photos greater than or equal to value | |
| gmap_photos_count_gt | integer | no | Filter by number of photos greater than value | |
| gmap_photos_count_lte | integer | no | Filter by number of photos less than or equal to value | |
| gmap_photos_count_lt | integer | no | Filter by number of photos less than value | |
| website_has_emails | boolean | no | 0 = false / 1 = true | Filter by presence of email addresses on website |
| website_has_contact_pages | boolean | no | 0 = false / 1 = true | Filter by presence of contact pages |
| website_has_facebook | boolean | no | 0 = false / 1 = true | Filter by presence of Facebook link |
| website_has_instagram | boolean | no | 0 = false / 1 = true | Filter by presence of Instagram link |
| website_has_youtube | boolean | no | 0 = false / 1 = true | Filter by presence of YouTube link |
| website_has_twitter | boolean | no | 0 = false / 1 = true | Filter by presence of Twitter link |
| website_has_linkedin | boolean | no | 0 = false / 1 = true | Filter by presence of LinkedIn link |
| website_has_ad_pixels | boolean | no | 0 = false / 1 = true | Filter by presence of advertising pixels |
| website_has_title | boolean | no | 0 = false / 1 = true | Filter by presence of title |
| website_has_meta_keywords | boolean | no | 0 = false / 1 = true | Filter by presence of meta keywords |
| website_has_meta_description | boolean | no | 0 = false / 1 = true | Filter by presence of meta description |
| website_has_phones | boolean | no | 0 = false / 1 = true | Filter by presence of phones |
Enrich
curl -G 'https://scrap.io/api/v1/gmap/enrich' \
-H 'Authorization: Bearer xxxxxxxxxx' \
-d "domain=hemingwaygallery.com"
$url = 'https://scrap.io/api/v1/gmap/enrich';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$params = [
'domain' => "hemingwaygallery.com",
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url . '?' . http_build_query($params));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/gmap/enrich'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
params = {
'domain' => "hemingwaygallery.com",
}
response = HTTParty.get(url, headers: headers, query: params)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/gmap/enrich'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
params = {
"domain": "hemingwaygallery.com",
}
response = requests.get(url, params=params, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/gmap/enrich'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
const params = {
'domain': "hemingwaygallery.com",
}
axios.get(url, { params: params, headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"meta": {
"count": "1",
"status": "completed",
"next_cursor": null,
"previous_cursor": null,
"per_page": 10,
"has_more_pages": false
},
"data": [
{
"google_id": "0x89c258e41a5508a1:0xb7f3b3480a81d211",
"name": "Hemingway African Gallery",
"types": [
{
"type": "art-gallery",
"is_main": true,
"deleted": false
}
],
"is_closed": false,
"is_temporarily_closed": false,
"descriptions": [
"Hemingway African Gallery’s art collection is ethically-sourced, often directly from artisans across the continent, and ranges from antique to decorative. This allows Hemingway to represent the broader art of Africa, offering accessible pieces to non-collectors. While the African art industry continues to buzz, this family-run NYC gallery has quietly become one of the largest importers of African art in the city.\nThe new street-level gallery at 88 Leonard St. brings African art, design, travel, and wildlife conservation under one roof to present visitors with a vision of the gallery’s next chapter as a destination for African aesthetics in the heart of Tribeca."
],
"website": "http://www.hemingwaygallery.com",
"phone": "(212) 838-3650",
"phone_international": "+12128383650",
"timezone": "America/New_York",
"location_full_address": "Hemingway African Gallery, 88 Leonard St, New York, NY 10013",
"location_borough": "Manhattan",
"location_street_1": "88 Leonard St",
"location_street_2": "88 Leonard St",
"location_city": "New York",
"location_postal_code": "10013",
"location_state": "New York",
"location_latitude": 40.7169591,
"location_longitude": -74.004565,
"location_country_code": "US",
"location_admin1_code": "NY",
"location_admin2_code": "061",
"other_places_at_this_location": [],
"link": "https://www.google.com/maps/preview/place/Hemingway+African+Gallery,+88+Leonard+St,+New+York,+NY+10013/@40.7169591,-74.004565,3024a,13.1y/data=!4m2!3m1!1s0x89c258e41a5508a1:0xb7f3b3480a81d211",
"place_id": "ChIJoQhVGuRYwokREdKBCkiz87c",
"cid": "13255135250276798993",
"mid": "/g/1v6p563b",
"owner_name": "Hemingway African Gallery",
"owner_id": "111154583307361228521",
"price_range": null,
"business_reported_price_range": null,
"customer_reported_price_range": null,
"customer_reported_price_range_detailed": null,
"customer_reported_price_range_currency": null,
"reviews_id": "-5191608823432752623",
"reviews_count": 17,
"reviews_rating": 4.6,
"reviews_per_score": {
"1": 1,
"2": 0,
"3": 0,
"4": 2,
"5": 14
},
"reviews_tags": {
"african-art": 2,
"sculpture": 2,
"staff": 3
},
"reviews_highlighted": [
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChdDSUhNMG9nS0VJQ0FnTUR3cEticDJ3RRAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgMDwpKbp2wE%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2025-03-23T00:00:00.000000Z",
"author": {
"name": "John doti",
"profile_link": "https://www.google.com/maps/contrib/114306862327427682240?hl=en-US"
},
"comment": "Casual stroll with relatives turned out to be an unforgettable experience. Noticed wonderful African art from the street and stopped in to meet Brian…. A warm and knowledgeable person who took the time to explain the pieces and even hooked my 7 year up with some polished rocks for his collection. Great find, check it out",
"detailed_experience": [],
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ANxoTn34Dfvrr3VkcYCfROz1xBm-XI8_8qxb-s1mdDY0yA4qzgvGGfvY1UJviw5qi-ZsgSBq8JMeku_7b5zYgxjnOtMUFichW-d0ZWC1EbifnbN1CmKUVaaIvgTbxQxA9wzn_f8Tdffx=k-no"
]
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnSUQ5dXNIVE9BEAE!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgID9usHTOA%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2024-03-15T00:00:00.000000Z",
"author": {
"name": "Alexi Assmus, PhD",
"profile_link": "https://www.google.com/maps/contrib/111349333733816284417?hl=en-US"
},
"comment": "Logan, Tucker and their Dad Brian run a wonderful family business with stunning African art of all sizes (sculptures like the Shona woman pictured here, smaller tabletop items, jewelry) and African safari tours run by Tucker. Zimbabwe, Uganda, …. The Manhattan art gallery is now almost 50 years old.\n\nLogan and Tucker brought the piece we purchased turn our home and helped site it perfectly.\n\nThank you and we hope to travel with them in the not so distant future.",
"detailed_experience": [],
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ANxoTn3nD57PDdAY-yzxDu4oYpqDdFHHKdKdwUitWwp8z0MTQ6CyGG7rgohsFKKjNR4fC0uT5Ap5TYIoLUht8DuwUauVKdh4zwhxrsoLT0ginyaT8izYq9MRuPjKC8RWylM9UX6WIpjjJQ=k-no"
]
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT25wamQxcEhjV1JxWkd0ZllUQlpWVEp1UW1WWlNuYxAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CAIQACodChtycF9oOnpjd1pHcWRqZGtfYTBZVTJuQmVZSnc%7C%7C?hl=en-US",
"rating": 1,
"publication_date": "2025-09-14T00:00:00.000000Z",
"author": {
"name": "Benita Diop",
"profile_link": "https://www.google.com/maps/contrib/112424659987503259755?hl=en-US"
},
"comment": "Stopped by for the first time the shop keeper was very strange I practically had to beg for help and a conversation about his findings then he just got on the phone in the middle of our conversation and never got off till I left. I can tell he was treating me weird based on his bias which is oddly ironic",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChdDSUhNMG9nS0VJQ0FnSUN1LV9tdC1nRRAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgICu-_mt-gE%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2023-05-14T00:00:00.000000Z",
"author": {
"name": "Kimberley Smith",
"profile_link": "https://www.google.com/maps/contrib/104759990406294943325?hl=en-US"
},
"comment": "My dancing shield from Cameroon arrived wonderfully packaged and in perfect condition. I will absolutely order from Hemingway African Gallery again.",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnSUNpZ3RmWVlnEAE!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgICigtfYYg%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2021-05-14T00:00:00.000000Z",
"author": {
"name": "Maryam Horri",
"profile_link": "https://www.google.com/maps/contrib/109068776453790320212?hl=en-US"
},
"comment": "Excellent collection of wide range of authentic African Art. Deeply knowledgeable native African owner is interested in education, conservation and promotion of African Art and Culture. Definitely worth a visit!",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChdDSUhNMG9nS0VJQ0FnTUNndnJxVGlRRRAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgMCgvrqTiQE%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2025-02-17T00:00:00.000000Z",
"author": {
"name": "Celine",
"profile_link": "https://www.google.com/maps/contrib/114628331085119106330?hl=en-US"
},
"comment": "Awesome stuff",
"detailed_experience": [],
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ANxoTn1erzgY5KdCj7UOTwCptslJx5z8pvf3oH8BvjlgZQSIxWcKdZ2Q3zuTwqi3itM5KHiPQPSYxmmVXMs8Q2lJtVWx8c0a-1Weao7fguhq79OC1vTxfXDYCFLc0xRED1aVpkDOwHXU=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn2H4ahaFo-9tj9AyEe-G5I8F5bbKo1WHAHI36im1LE8_YC3wMc7XPWcC6DyIgB2JR2ou2t78Vkv-1iLZnWEkpYavTtJ8AAxLEZ7loBwboGGyNeyknM8j5UqIl3ZJDQSfqxJIm-cnA=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn245wVGihtV205rbGYtaN6AkvLODztd3v6mtY4VhzNZQhmbsKITsbMVVRfw055yHt5VmrjzRLSWzkMTcapcrVT7tcvhWyrOK_HsIb4xJXVBBdNL8wDgiLL2JRIMvr9rqgzOu-vN=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn13B556aFSL3jWHNS0s-hcY_DU_6p80aZi3ZjEGNUugnMJEHRLSenmivUepEOyK02etXZ8g-lyYsrxF33OhZeMAIrYgBtCa82Ft5cwVJY5WnWwgFBaO6uahLCMkrelPqwXgH-gP=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn0lQx6ChNV4trueG90K5nKDGWn9RaustiEUx5zlTDnFpyJDkg9u-ieYLk_HAvoTDUhr1IZXYAdzUEneOqP9cXInDmuL3Gfgy9jJqzR0mziyLAvvHrzhyRD01PNCSwx74w0WxRQ=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn1oruygaPTaFT5zDZMo0IGrnmsDXLW5K_Lx7ehtnyHEzT3r3uwG5wFTFvYYR2eJGL_Y9WKxOYVsuWpfFCvwKzmA5Pic1n9pA73wgKvtfX9jCpC_CUkA5uR-W0mEv3ZLpIXzYza9QQ=k-no",
"https://lh3.googleusercontent.com/grass-cs/ANxoTn1O4Ku-nWUEw1AxXIIMCQRSZ5-AV45Vi6mICY_UFGR04rW56XB38n_8gRX73WSS7Fl6LVhYLwZrKF4yQnnq5Ir0Rp3grYThpT6mLlP6s1BSMPrgkbmjg73_8JzpNjLclyB4G7Y=k-no"
]
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xZMGQwMVBURXBQVW01NWFHRm1hMUYwYWsxUFYzYxAB!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CAIQACodChtycF9oOlY0d01PTEpPUm55aGFma1F0ak1PV3c%7C%7C?hl=en-US",
"rating": 4,
"publication_date": "2026-03-14T00:00:00.000000Z",
"author": {
"name": "Lutfa Begum",
"profile_link": "https://www.google.com/maps/contrib/116045565670203265165?hl=en-US"
},
"comment": "Perfect service!",
"detailed_experience": [],
"photos": []
},
{
"link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChZDSUhNMG9nS0VJQ0FnSUMyXzd2VUdBEAE!2m1!1s0x0:0xb7f3b3480a81d211!3m1!1s2@1:CIHM0ogKEICAgIC2_7vUGA%7C%7C?hl=en-US",
"rating": 5,
"publication_date": "2022-05-14T00:00:00.000000Z",
"author": {
"name": "Chris c",
"profile_link": "https://www.google.com/maps/contrib/102330187085865636053?hl=en-US"
},
"comment": "Obsessed with my stunning new sculpture. Will do business with Hemingway again. Thanks!",
"detailed_experience": [],
"photos": []
}
],
"photos_count": "36+",
"photos": [
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAHOEeGgVRVLxklQqFYJOlI4X_9jh6VzhZNpIgiXfxW-ujpZOvj76vFKp6vpcm-Dix1uu5tI1vjBSDCtpNN2lcNQm5TXfJS6h0Qvj_QhH0iT4rao7nlALtX4NcZzETdB2sD9k62f",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAHvXvYsBspZV9_ehigG64avURi-yEd8eTq2gPQooGhnADi9ZrIn4ywIzjQHMJpudtM6URUUkqBqIqLy1auSF2ykMqX436YB0DkB9thovdxM1pIqxO5l2CMv3GebEOYcnBJVO619",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAGL-J3WADykHMz59XT1qGj9SDzpiamViSlJQROZFvBPycHVvJO1-Qr9aLLajw4uWKIL9yId8awGtQy8FMwQLEd_TXYKV9b7OrSFcC6gr1nzTKL9-pYPzqrF0xHqyXHd5kp7OqhR",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAF0Z8e3YI30ncXz1KmAQbVGFe6k-Lon4qHVbdTnMezUtjBZzFEjCpzi6gKsQoHV7N4SoQHCNN5cs0gAOBMaF6aIEFHJPuChhI4xYY_CwycwVk-Nh-MoeTBYdfKjEy2ZEH9m_Yx5",
"https://lh3.googleusercontent.com/gps-cs-s/APNQkAGSpqMrUgpupsHxgOJm22uLekCTzEG80KcHUlA6fBLcSnIS6IdPoPiyNEZq9uw1LXxCo7pMtjy-IVdI8m1qQMyThHaDjlyF46NBfY5PHCwGpzNEmAj6NJnw9wSS4lRBvvm-V-fU8PW90HZA"
],
"photos_menu": [],
"photos_360": [
"https://streetviewpixels-pa.googleapis.com/v1/thumbnail?panoid=x9Q8-mM5JZZdX75T3U03sQ&cb_client=maps_sv.tactile.gps&w=224&h=298&yaw=259.11215&pitch=0&thumbfov=100"
],
"characteristics": {
"from-the-business": {
"identifies-as-women-owned": "identifies-as-women-owned"
},
"accessibility": {
"wheelchair-accessible-entrance": "has-wheelchair-accessible-entrance"
},
"amenities": {
"restaurant": "no-restaurant"
}
},
"occupancy": {
"monday": null,
"tuesday": null,
"wednesday": null,
"thursday": null,
"friday": null,
"saturday": null,
"sunday": null
},
"booking_links": [],
"order_links": [],
"offerings_link": null,
"hotel_infos": null,
"is_claimed": true,
"working_hours": {
"monday": "1030-am-6-pm",
"tuesday": "1030-am-6-pm",
"wednesday": "1030-am-6-pm",
"thursday": "1030-am-6-pm",
"friday": "1030-am-6-pm",
"saturday": "1030-am-6-pm",
"sunday": "11-am-5-pm"
},
"status": "completed",
"scraped_at": "2026-05-14T02:20:30.000000Z",
"first_seen_at": "2021-08-30T10:30:14.000000Z",
"website_data": {
"url": "http://www.hemingwaygallery.com",
"domain": "hemingwaygallery.com",
"is_responding": true,
"is_empty": false,
"title": "Hemingway Gallery | African Art, Masks & Shona Sculpture",
"meta_keywords": null,
"meta_description": "Shop African art, masks, furniture and Shona stone sculpture at Hemingway Gallery. Family-run since 1975, we offer one-of-a-kind works ethically sourced across Africa. Buy online or visit our gallery, open to the public in New York City.",
"meta_og_title": "Hemingway Gallery | African Art, Masks & Shona Sculpture",
"meta_og_image": "http://hemingwaygallery.nyc/cdn/shop/files/Seating-1_copy_2a3964d1-a71b-4389-97b0-fe4d5ed7555b.jpg?v=1774557859&width=2048",
"meta_generator": null,
"lang": "en",
"contact_pages": [
"http://www.hemingwaygallery.com/policies/contact-information"
],
"facebook": [
"https://facebook.com/hemingwaysafaris"
],
"youtube": null,
"twitter": null,
"instagram": [
"https://instagram.com/hemingwaysafaris"
],
"linkedin": null,
"tiktok": null,
"technologies": [
"Shopify"
],
"ad_pixels": [],
"emails": [
{
"email": "[email protected]",
"domain": "hemingwayafricangallery.com",
"category": "info-contact",
"pattern": null,
"firstname": null,
"lastname": null,
"gender": null,
"mx_provider": "google",
"is_webmail": false,
"is_disposable": false,
"has_mx": true,
"sources": [
"https://hemingwaygallery.nyc",
"https://hemingwaygallery.nyc/collections/decorative-african-art",
"https://hemingwaygallery.nyc/collections/woven-and-wire-baskets",
"https://hemingwaygallery.nyc/collections/beaded-animals-1",
"https://hemingwaygallery.nyc/collections/bowls-1",
"https://hemingwaygallery.nyc/collections/beaded-namji-dolls",
"https://hemingwaygallery.nyc/collections/bozo-fish-puppets",
"https://hemingwaygallery.nyc/collections/decorative-masks",
"https://hemingwaygallery.nyc/collections/fang-masks",
"https://hemingwaygallery.nyc/collections/guro-masks",
"https://hemingwaygallery.nyc/collections/baule-masks",
"https://hemingwaygallery.nyc/collections/movie-posters",
"https://hemingwaygallery.nyc/collections/sculpture",
"https://hemingwaygallery.nyc/collections/dancing-shields",
"https://hemingwaygallery.nyc/collections/wall-art",
"https://hemingwaygallery.nyc/collections/shona-sculpture",
"https://hemingwaygallery.nyc/collections/abstract-sculpture-1",
"https://hemingwaygallery.nyc/collections/animal-shona-sculpture",
"https://hemingwaygallery.nyc/collections/figural-sculpture",
"https://hemingwaygallery.nyc/collections/monumental-shona-sculpture",
"https://hemingwaygallery.nyc/collections/table-top-shona-sculpture",
"https://hemingwaygallery.nyc/collections/stone-bowls",
"https://hemingwaygallery.nyc/collections/antique-art",
"https://hemingwaygallery.nyc/collections/antique-masks",
"https://hemingwaygallery.nyc/collections/antique-figures",
"https://hemingwaygallery.nyc/collections/headrests"
]
}
],
"phones": [
{
"phone": "+12128383650",
"sources": [
"https://hemingwaygallery.nyc/products/beaded-zebra-south-africa-2"
]
}
],
"status": "completed",
"scraped_at": "2026-05-14T03:18:47.000000Z"
},
"blacklisted": false
}
]
}
Our API includes a powerful feature that allows you to enrich a domain, URL, email, or phone number with data from Google Maps.
With this endpoint, you can retrieve the google places related to the data provided (domain, url, email, phone), and all their details.
HTTP Request
GET https://scrap.io/api/v1/gmap/enrich
Query Parameters
| Parameter | Default | Required | Description |
|---|---|---|---|
| per_page | 10 | No | Number of results per page (1, 10, 25 or 50) |
| skip_data | 0 | No | Boolean (0 = false / 1 = true) to indicate whether to skip the data part of the response. When the data is skipped, it won't deduct any export credit. |
| skip_blacklist | 0 | No | Boolean (0 = false or 1 = true) to indicate that you want to skip the verification of potential blacklisted places. |
| blacklists | Verify all blacklists. | No | Array containing blacklist names. When specified, only the given blacklists will be verified. |
| cursor | No | Cursor pagination | |
| country_code | No | 2 letters (ISO 3166-1 alpha-2) country code (FR, US, etc.) | |
| url | No | Exact URL mentioned on Google Maps | |
| domain | No | Domain mentioned in Google Maps | |
| No | Email found on the website of Google Place | ||
| phone | No | Phone in international format associated with the Google Place (e.g.: 33139732419) |
Blacklist
Our API includes a feature that allows you to add items to a blacklist by email, domain, Google ID, or Place ID. This ensures that these items will not be displayed in future requests and will not be counted towards your credits.
This feature is particularly useful to avoid re-scraping the same results, and counting your credits again for the same data.
List
curl -G 'https://scrap.io/api/v1/blacklists' \
-H 'Authorization: Bearer xxxxxxxxxx'
$url = 'https://scrap.io/api/v1/blacklists';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/blacklists'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
response = HTTParty.get(url, headers: headers)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/blacklists'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
response = requests.get(url, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/blacklists'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
axios.get(url, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
[
{
"list": "my-list-1",
"nb": 2
},
{
"list": "my-list-2",
"nb": 1
}
]
This endpoint allows you to get the list of all your blacklists.
HTTP Request
GET https://scrap.io/api/v1/blacklists
Show
curl -G 'https://scrap.io/api/v1/blacklists/my-list' \
-H 'Authorization: Bearer xxxxxxxxxx'
$url = 'https://scrap.io/api/v1/blacklists/my-list';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/blacklists/my-list'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
response = HTTParty.get(url, headers: headers)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/blacklists/my-list'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
response = requests.get(url, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/blacklists/my-list'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
axios.get(url, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"meta": {
"count": 2,
"current_page": 1,
"previous_page": null,
"next_page": null,
"per_page": 50,
"has_more_pages": false
},
"data": [
{
"list": "my-list",
"type": "email",
"data": "[email protected]"
},
{
"list": "my-list",
"type": "email",
"data": "[email protected]"
}
]
}
This endpoint allows you to get a paginated list of all your entries for a specific blacklist.
HTTP Request
GET https://scrap.io/api/v1/blacklists/{list-name}
Query parameters
| Parameter | Type | Default | Required | Options | Description |
|---|---|---|---|---|---|
| page | integer | 1 | no | Get the results for the given page |
Add
curl -X POST 'https://scrap.io/api/v1/blacklists/my-list-1' \
-H 'Authorization: Bearer xxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"type": "domain",
"data": ["sugarfishsushi.com"]
}'
$url = 'https://scrap.io/api/v1/blacklists/my-list-1';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
'Content-Type: application/json',
];
$params = [
'type' => "domain",
'data' => ["sugarfishsushi.com"],
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/blacklists/my-list-1'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
'Content-Type' => 'application/json',
}
params = {
'type' => "domain",
'data' => ["sugarfishsushi.com"],
}
response = HTTParty.post(url, headers: headers, body: params.to_json)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/blacklists/my-list-1'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
'Content-Type': 'application/json',
}
params = {
"type": "domain",
"data": ["sugarfishsushi.com"],
}
response = requests.post(url, json=params, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/blacklists/my-list-1'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
'Content-Type': 'application/json',
};
const params = {
'type': "domain",
'data': ["sugarfishsushi.com"],
}
axios.post(url, params, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"message": "All 1 entries successfully processed."
}
This endpoint allows you to add data to a blacklist (google_id, place_id, domain or email).
HTTP Request
POST https://scrap.io/api/v1/blacklists/{list-name}
Body Parameters
| Parameter | type | Required | Description |
|---|---|---|---|
| type | string | yes | Type of data to add to the blacklist (google_id,place_id,domain,email) |
| data | array | yes | Data to add to the blacklist. Must be an array of strings ["xxx1", "xxx2"] - (limited to 100 entries per query). |
Delete
curl -X DELETE 'https://scrap.io/api/v1/blacklists/my-list-1' \
-H 'Authorization: Bearer xxxxxxxxxx'
$url = 'https://scrap.io/api/v1/blacklists/my-list-1';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/blacklists/my-list-1'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
response = HTTParty.delete(url, headers: headers)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/blacklists/my-list-1'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
response = requests.delete(url, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/blacklists/my-list-1'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
axios.delete(url, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"message": "success"
}
This endpoint allows you to delete a list.
HTTP Request
DELETE https://scrap.io/api/v1/blacklists/{list-name}
Export
All
curl -G 'https://scrap.io/api/v1/exports?status=success&order_by=asc' \
-H 'Authorization: Bearer xxxxxxxxxx'
$url = 'https://scrap.io/api/v1/exports?status=success&order_by=asc';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/exports?status=success&order_by=asc'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
response = HTTParty.get(url, headers: headers)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/exports?status=success&order_by=asc'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
response = requests.get(url, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/exports?status=success&order_by=asc'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
axios.get(url, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"meta": {
"count": 2,
"current_page": 1,
"previous_page": null,
"next_page": null,
"per_page": 25,
"has_more_pages": false
},
"data": [
{
"id": 1,
"name": "My first export",
"country": "FR",
"types": [
"boat-rental-service"
],
"search_params": {
"types": [
"boat-rental-service"
],
"country": "FR",
"admin1": "93",
"city": "Beaulieu-sur-Mer"
},
"status": "success",
"exported_lines_limit": null,
"exported_columns": [
"google_id",
"name"
],
"prepared_rows_count": 17,
"exported_csv_count": 17,
"exported_xlsx_count": 17,
"is_stopped": false,
"has_been_downloaded": true,
"credits_used": 0,
"export_only_new_email": 0,
"export_only_new_place": 0,
"scraped_at": "2025-02-16T09:47:39.000000Z"
},
{
"id": 2,
"name": "Bar karaoké - France - Nouvelle-Aquitaine",
"country": "FR",
"types": [
"karaoke-bar"
],
"search_params": {
"types": [
"karaoke-bar"
],
"country": "FR",
"admin1": "75"
},
"status": "success",
"advanced_fields": [],
"exported_lines_limit": null,
"exported_columns": [
"google_id",
"name"
],
"prepared_rows_count": 10,
"exported_csv_count": 10,
"exported_xlsx_count": 10,
"is_stopped": false,
"has_been_downloaded": false,
"credits_used": 0,
"export_only_new_email": 0,
"export_only_new_place": 0,
"scraped_at": "2025-02-19T07:04:09.000000Z"
}
]
}
This endpoint allows you to get a paginated list of your exports.
HTTP Request
GET https://scrap.io/api/v1/exports
Query parameters
| Parameter | Type | Default | Required | Options | Description |
|---|---|---|---|---|---|
| search | string | no | Search in export name | ||
| status | array | no | preparing-scraping, scraping, preparing-export, exporting-csv, exporting-xlsx, pending, incomplete, success, error | Status of the export | |
| order_by | string | desc | no | asc, desc | Sort by scraping_date |
| page | integer | 1 | no | Get the results for the given page |
Find
curl -G 'https://scrap.io/api/v1/exports/2' \
-H 'Authorization: Bearer xxxxxxxxxx'
$url = 'https://scrap.io/api/v1/exports/2';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/exports/2'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
response = HTTParty.get(url, headers: headers)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/exports/2'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
response = requests.get(url, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/exports/2'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
axios.get(url, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"id": 2,
"name": "Bar karaoké - France - Nouvelle-Aquitaine",
"country": "FR",
"types": [
"karaoke-bar"
],
"search_params": {
"types": [
"karaoke-bar"
],
"country": "FR",
"admin1": "75"
},
"status": "success",
"exported_lines_limit": null,
"exported_columns": [
"google_id",
"name"
],
"prepared_rows_count": 10,
"exported_csv_count": 10,
"exported_xlsx_count": 10,
"is_stopped": false,
"has_been_downloaded": false,
"credits_used": 0,
"export_only_new_email": 0,
"export_only_new_place": 0,
"scraped_at": "2025-02-19T07:04:09.000000Z"
}
This endpoint allows you to get one of your exports depending on the id.
HTTP Request
GET https://scrap.io/api/v1/exports/{id}
Download
curl -G 'https://scrap.io/api/v1/exports/2/download?type=csv' \
-H 'Authorization: Bearer xxxxxxxxxx' \
-H 'Content-Type: application/json'
$url = 'https://scrap.io/api/v1/exports/2/download?type=csv';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
'Content-Type: application/json',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/exports/2/download?type=csv'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
'Content-Type' => "application/json",
}
response = HTTParty.get(url, headers: headers)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/exports/2/download?type=csv'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
'Content-Type': 'application/json',
}
response = requests.get(url, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/exports/2/download?type=csv'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
'Content-Type': 'application/json',
};
axios.get(url, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"download_url": "https://scrap-io.s3.amazonaws.com/sample-download-url",
"compressed": false
}
This endpoint allows you to get a temporary url to download an export file based on the export id. The link is valid for 5 minutes.
HTTP Request
GET https://scrap.io/api/v1/exports/{id}/download
Query parameters
| Parameter | Type | Required | Options | Description |
|---|---|---|---|---|
| type | string | yes | csv, xlsx | Type of the file you want to download. |
Create
curl -X POST 'https://scrap.io/api/v1/exports' \
-H 'Authorization: Bearer xxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"name": "My export name (1)",
"country_code": "FR",
"type": "karaoke-bar",
"admin1_code": "75",
"exported_lines_limit": 4,
"exported_columns": ["google_id", "name"],
"gmap_price_range": "$$",
"website_has_instagram": true
}'
$url = 'https://scrap.io/api/v1/exports';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
'Content-Type: application/json',
];
$params = [
'name' => "My export name (1)",
'country_code' => "FR",
'type' => "karaoke-bar",
'admin1_code' => "75",
'exported_lines_limit' => 4,
'exported_columns' => ["google_id", "name"],
'gmap_price_range' => "$$",
'website_has_instagram' => true,
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/exports'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
'Content-Type' => 'application/json',
}
params = {
'name' => "My export name (1)",
'country_code' => "FR",
'type' => "karaoke-bar",
'admin1_code' => "75",
'exported_lines_limit' => 4,
'exported_columns' => ["google_id", "name"],
'gmap_price_range' => "$$",
'website_has_instagram' => true,
}
response = HTTParty.post(url, headers: headers, body: params.to_json)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/exports'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
'Content-Type': 'application/json',
}
params = {
"name": "My export name (1)",
"country_code": "FR",
"type": "karaoke-bar",
"admin1_code": "75",
"exported_lines_limit": 4,
"exported_columns": ["google_id", "name"],
"gmap_price_range": "$$",
"website_has_instagram": true,
}
response = requests.post(url, json=params, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/exports'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
'Content-Type': 'application/json',
};
const params = {
'name': "My export name (1)",
'country_code': "FR",
'type': "karaoke-bar",
'admin1_code': "75",
'exported_lines_limit': 4,
'exported_columns': ["google_id", "name"],
'gmap_price_range': "$$",
'website_has_instagram': true,
}
axios.post(url, params, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"id": 3,
"name": "My export name (1)",
"country": "FR",
"types": [
"karaoke-bar"
],
"search_params": {
"types": [
"karaoke-bar"
],
"country": "FR",
"admin1": "75"
},
"status": "pending",
"exported_lines_limit": null,
"exported_columns": [
"google_id",
"name"
],
"prepared_rows_count": 10,
"exported_csv_count": 10,
"exported_xlsx_count": 10,
"is_stopped": false,
"has_been_downloaded": false,
"credits_used": 0,
"export_only_new_email": 0,
"export_only_new_place": 0,
"scraped_at": "2025-02-19T07:04:09.000000Z"
}
HTTP Request
POST https://scrap.io/api/v1/exports
Body parameters
| Parameter | Type | Required | Options | Description |
|---|---|---|---|---|
| name | string | yes if auto_name not present or false | The name of the export. Must be unique, min 3 char and max 255 char | |
| auto_name | boolean | yes if name not present | 0 = false / 1 = true | If set, we'll generate a name for you |
| type | string | yes | Id from this endpoint | Type of place |
| country_code | string | yes | 2 letters (ISO 3166-1 alpha-2) country code (FR, US, etc.) | |
| admin1_code | string | no | Id from this endpoint | Level 1 division for the country |
| admin2_code | string | no | Id from this endpoint | Level 2 division for the country |
| city | string | no | Text from this endpoint | City |
| exported_lines_limit | integer | no | 0 = false / 1 = true | The maximum number of results wanted in the export |
| export_only_new_place | boolean | no | 0 = false / 1 = true | Export only places not present in previous exports |
| export_only_new_email | boolean | no | 0 = false / 1 = true | Export only places with email not already present in previous exports |
| exported_columns | array | no | See "Export columns" section below. | Columns to include in the export file. Require at least one column if passed. If no specified, all columns will be exported |
| gmap_is_main_type | boolean | no | 0 = false / 1 = true | Filter by main business type only |
| gmap_is_closed | boolean | no | 0 = false / 1 = true | Filter by permanently closed status |
| gmap_has_website | boolean | no | 0 = false / 1 = true | Filter by presence of website |
| gmap_has_phone | boolean | no | 0 = false / 1 = true | Filter by presence of phone number |
| gmap_is_claimed | boolean | no | 0 = false / 1 = true | Filter by claimed business status |
| gmap_price_range | string | no | $, $$, $$$, $$$$ | Filter by price level |
| gmap_reviews_rating_gte | float | no | Filter by rating greater than or equal to value | |
| gmap_reviews_rating_gt | float | no | Filter by rating greater than value | |
| gmap_reviews_rating_lte | float | no | Filter by rating less than or equal to value | |
| gmap_reviews_rating_lt | float | no | Filter by rating less than value | |
| gmap_reviews_count_gte | integer | no | Filter by number of reviews greater than or equal to value | |
| gmap_reviews_count_gt | integer | no | Filter by number of reviews greater than value | |
| gmap_reviews_count_lte | integer | no | Filter by number of reviews less than or equal to value | |
| gmap_reviews_count_lt | integer | no | Filter by number of reviews less than value | |
| gmap_photos_count_gte | integer | no | Filter by number of photos greater than or equal to value | |
| gmap_photos_count_gt | integer | no | Filter by number of photos greater than value | |
| gmap_photos_count_lte | integer | no | Filter by number of photos less than or equal to value | |
| gmap_photos_count_lt | integer | no | Filter by number of photos less than value | |
| website_has_emails | boolean | no | 0 = false / 1 = true | Filter by presence of email addresses on website |
| website_has_contact_pages | boolean | no | 0 = false / 1 = true | Filter by presence of contact pages |
| website_has_facebook | boolean | no | 0 = false / 1 = true | Filter by presence of Facebook link |
| website_has_instagram | boolean | no | 0 = false / 1 = true | Filter by presence of Instagram link |
| website_has_youtube | boolean | no | 0 = false / 1 = true | Filter by presence of YouTube link |
| website_has_twitter | boolean | no | 0 = false / 1 = true | Filter by presence of Twitter link |
| website_has_linkedin | boolean | no | 0 = false / 1 = true | Filter by presence of LinkedIn link |
| website_has_ad_pixels | boolean | no | 0 = false / 1 = true | Filter by presence of advertising pixels |
Export columns
| Parameter | Description |
|---|---|
| google_id | Google id |
| name | Name |
| descriptions | Descriptions |
| is_closed | Is closed |
| main_type | Main type |
| all_types | Types |
| website | Website |
| phone | Phone |
| timezone | Timezone |
| location_address | Address |
| location_coordinates | Coordinates |
| link | Link |
| owner | Owner |
| place_id | Place id |
| facebook_link | Facebook link |
| youtube_link | Youtube link |
| twitter_link | Twitter link |
| instagram_link | Instagram link |
| linkedin_link | Linkedin link |
| first_seen_at | Seen for the first time (date) |
| price_range | Price Range |
| reviews | Reviews |
| photos | Photos |
| occupancy | Occupancy |
| is_claimed | Is claimed |
| working_hours | Opening hours |
| characteristics | Characteristics |
| website_title | Website name |
| website_meta | Website meta |
| website_lang | Website language |
| all_emails | All emails |
| contact_pages | Contact pages |
| all_facebook_links | All facebook links |
| all_youtube_links | All youtube links |
| all_twitter_links | All twitter links |
| all_instagram_links | All instagram links |
| all_linkedin_links | All linkedin links |
| website_technologies | Website technologies |
| website_ad_pixels | Website pixel ad |
Update
curl -X PATCH 'https://scrap.io/api/v1/exports/3' \
-H 'Authorization: Bearer xxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"name": "My new export name"
}'
$url = 'https://scrap.io/api/v1/exports/3';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
'Content-Type: application/json',
];
$params = [
'name' => "My new export name",
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/exports/3'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
'Content-Type' => 'application/json',
}
params = {
'name' => "My new export name",
}
response = HTTParty.patch(url, headers: headers, body: params.to_json)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/exports/3'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
'Content-Type': 'application/json',
}
params = {
"name": "My new export name",
}
response = requests.patch(url, json=params, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/exports/3'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
'Content-Type': 'application/json',
};
const params = {
'name': "My new export name",
}
axios.patch(url, params, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"id": 3,
"name": "My new export name",
"country": "FR",
"types": [
"karaoke-bar"
],
"search_params": {
"types": [
"karaoke-bar"
],
"country": "FR",
"admin1": "75"
},
"status": "pending",
"exported_lines_limit": null,
"exported_columns": [
"google_id",
"name"
],
"prepared_rows_count": 10,
"exported_csv_count": 10,
"exported_xlsx_count": 10,
"is_stopped": false,
"has_been_downloaded": false,
"credits_used": 0,
"export_only_new_email": 0,
"export_only_new_place": 0,
"scraped_at": "2025-02-19T07:04:09.000000Z"
}
This endpoint allows you to rename one of your exports.
HTTP Request
PATCH https://scrap.io/api/v1/exports/{id}
Body parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The name of the export. Must be unique, min 3 char and max 255 char. |
Delete
curl -X DELETE 'https://scrap.io/api/v1/exports/2' \
-H 'Authorization: Bearer xxxxxxxxxx'
$url = 'https://scrap.io/api/v1/exports/2';
$headers = [
'Authorization: Bearer xxxxxxxxxx',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response);
require 'httparty'
require 'json'
url = 'https://scrap.io/api/v1/exports/2'
headers = {
'Authorization' => 'Bearer xxxxxxxxxx',
}
response = HTTParty.delete(url, headers: headers)
json = JSON.parse(response.body)
import requests
import json
url = 'https://scrap.io/api/v1/exports/2'
headers = {
'Authorization': 'Bearer xxxxxxxxxx',
}
response = requests.delete(url, headers=headers)
json = response.json()
const axios = require('axios')
const url = 'https://scrap.io/api/v1/exports/2'
const headers = {
'Authorization': 'Bearer xxxxxxxxxx',
};
axios.delete(url, { headers: headers })
.then((response) => {
const json = response.data;
});
The above code returns JSON structured like this:
{
"message": "success"
}
This endpoint allows you to delete one of your exports.
HTTP Request
DELETE https://scrap.io/api/v1/exports/{id}
Errors
The Scrap.io API uses the following error codes:
| Error Code | Meaning |
|---|---|
| 401 | Unauthenticated -- Your API key is wrong, or not authorized to access this endpoint. |
| 403 | Unauthorized -- You don't have the authorization to execute this request. |
| 404 | Not Found -- The resource was not found. |
| 405 | Method Not Allowed -- You tried to access an endpoint with an invalid method. |
| 408 | Timeout -- Too many results to process. Please, try refining your search. |
| 422 | Unprocessable entity -- Your request is invalid. |
| 423 | Locked -- The resource cannot be accessed. |
| 429 | Too Many Requests -- You're making too many requests! Slow down! |
| 500 | Internal Server Error -- We had a problem with our server. Try again later. |
| 503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |