Google Maps Contacts API - Emails & Socials from Business Websites
Documentation menu
FetchLayer FetchLayer API

Collect contact details from place websites

The second step after /place-search: read businesses’ own websites for email addresses, phone numbers and social profiles. Pass places (any place reference, such as the placeId values from a search) and/or websites (the website values from a search, which is cheaper because no lookup is needed), at least 1 and at most 20 combined. Items come back in input order, places first, each with a status. Billing: pagesScraped is 1 per website that answered (any HTTP response, including a 403 or 404; timeouts, unreachable sites and social-profile URLs are free) plus 1 per place whose website had to be looked up. A place without a website is free, lookup included, and a website shared by several items is billed once. Twenty items can take up to about 100 seconds. A malformed place is a 400 naming its index, e.g. places[1].

POST /place-contacts Places
https://api.fetchlayer.dev/google-maps/place-contacts
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

places string[] optional

Places to collect contacts for: ChIJ place IDs, hex feature IDs, Google Maps place URLs, CID URLs or short links. Required unless websites is given; at most 20 combined with websites.

websites string[] optional

Business websites to read directly, such as the website values from /place-search. No lookup needed, so each costs only the website read.

format string optional

json or markdown. (default: json)

Response Fields

place-contacts

Collect contact details from place websites

entityType string

Always gmaps-place-contacts.

items object[]

One item per input, in input order: places first, then websites.

items[].input object

What was asked for: type (place or website) and value.

items[].place object | null

For a place input, the place that was looked up: placeId, name and website. null for a website input.

items[].website string | null

The website that was read.

items[].contacts object | null

emails[], phones[], socials (facebook, instagram, linkedin, x, youtube, tiktok, pinterest, each a list) and sourcePages[], the pages they were found on. null when nothing could be read.

items[].status string

found, none (the site was read and had no contacts), no_website, blocked, unreachable, timeout or not_found. When website is null, blocked, unreachable and timeout refer to the place lookup.

itemCount number

Items in this response.

websitesFetched number

Websites that answered.

placeLookups number

Places whose website had to be looked up first.

pagesScraped number

websitesFetched plus placeLookups. Each counts as one request against your plan.

Request

curl -X POST "https://api.fetchlayer.dev/google-maps/place-contacts" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"places":["ChIJ4YBYuiB5bIcR4CF00Xm9cC0"],"websites":["http://www.scr3amnsugar.com/"]}'

Response

{
  "entityType": "gmaps-place-contacts",
  "itemCount": 2,
  "items": [
    {
      "input": {
        "type": "place",
        "value": "ChIJ4YBYuiB5bIcR4CF00Xm9cC0"
      },
      "place": {
        "placeId": "ChIJ4YBYuiB5bIcR4CF00Xm9cC0",
        "name": "Little Owl Coffee - Tremont",
        "website": "http://littleowlcoffee.com/"
      },
      "website": "http://littleowlcoffee.com/",
      "contacts": {
        "emails": [],
        "phones": [],
        "socials": {
          "facebook": [],
          "instagram": [
            "https://instagram.com/littleowlcoffee"
          ],
          "linkedin": [],
          "x": [],
          "youtube": [],
          "tiktok": [],
          "pinterest": []
        },
        "sourcePages": [
          "https://www.littleowlcoffee.com/",
          "https://www.littleowlcoffee.com/contact"
        ]
      },
      "status": "found"
    },
    {
      "input": {
        "type": "website",
        "value": "http://www.scr3amnsugar.com/"
      },
      "place": null,
      "website": "http://www.scr3amnsugar.com/",
      "contacts": {
        "emails": [],
        "phones": [],
        "socials": {
          "facebook": [
            "https://facebook.com/scr3amnsugar"
          ],
          "instagram": [
            "https://instagram.com/scr3amnsugar"
          ],
          "linkedin": [],
          "x": [],
          "youtube": [],
          "tiktok": [
            "https://tiktok.com/@scr3amnsugar"
          ],
          "pinterest": []
        },
        "sourcePages": [
          "https://www.scr3amnsugar.com/"
        ]
      },
      "status": "found"
    }
  ],
  "websitesFetched": 2,
  "placeLookups": 1,
  "pagesScraped": 3,
  "scrapedAt": "2026-09-15T21:31:02.121Z"
}