Clair API
  • All APIs
  • Pricing
  • Docs
SERP & Search
  • Google Search API
  • Google Maps API
News & Media
  • Google News API
  • Bloomberg News API
  • Associated Press API
  • Reuters News API
Jobs & Hiring
  • Glassdoor API
  • Greenhouse Jobs API
  • Indeed Jobs API
E-commerce
  • Amazon Products API
Company Data & Reviews
  • Trustpilot Reviews API
  • Product Hunt API
  • Crunchbase API
Contact & Lead Data
  • Website Contacts API
Missing a data source? Ask for one →
  • Use cases
  • Comparisons
  • Glossary
Ecommerce and reviews
  • Amazon price monitoring
  • Trustpilot review monitoring
  • MAP enforcement on Amazon
  • Amazon rating monitoring
  • Amazon category research
  • Trustpilot competitor benchmarking
Search and local
  • Google rank tracking
  • Local lead generation
  • Local SEO competitor audit
  • Grounding LLM answers in search results
  • Content research from People also ask
Leads and companies
  • Lead enrichment from company websites
  • Product Hunt launch tracking
  • Startup deal sourcing
  • Account research briefs
Jobs and hiring
  • Salary benchmarking
  • Job market analytics
  • Hiring signals for sales
  • Employer reputation tracking
News
  • Media monitoring
  • Financial news alerts
  • News corpus for research and RAG
Comparisons
  • Clair vs SerpApi
  • Clair vs Google Places API
  • Clair vs Google Custom Search API
  • Clair vs Hunter
GlossarySERPSERP APIPeople also askGoogle place IDASINBuy BoxGTINSalary percentilesTrustScoreWeb scrapingAll 40 terms →
PricingDocs
Dashboard

Use cases / Google Maps API, Website Contacts API

Local lead generation

Search Google Maps for a category in each city you sell to, keep every business with its phone, website, and rating, and add the email address each one publishes on its own site. Two APIs: Google Maps for the list, Website Contacts for the email.

Last updated September 28, 2026. Response excerpts are recorded from the live API.

Try the Google Maps API →Try the Website Contacts API →

On this page

  1. Who
  2. Pipeline
  3. Code
  4. Cost
  5. Limits
  6. FAQ

Who

Who runs this, and what for

TeamWhat they decide with it
Agencies and B2B sales teamsWhich local businesses to call, with a list that has phones and websites already.
Vertical SaaS companiesHow many prospects a region holds, and which have no website or few reviews.
MarketplacesWhich providers to invite onto the platform, city by city.

Pipeline

The calls, step by step

  1. 01Search each category and city

    One Maps search scrolls the results list and returns every place it loaded, usually 20 to 70, with the phone, website, address, category, rating, and review count. place_id identifies each business across searches.

    GET /v1/search?engine=google_maps&q=plumbers+in+Denver&country=us · results.0

    {
      "position": 1,
      "title": "Applewood Plumbing Heating & Electric",
      "place_id": "ChIJkWUJx22Ha4cRVVLq4AJk7Ng",
      "data_id": "0x876b876dc7096591:0xd8ec6402e0ea5255",
      "cid": "15630978370222314069",
      "latitude": 39.7583004,
      "longitude": -105.0512657,
      "rating": 4.8,
      "reviews_count": 17793,
      "category": "Plumber",
      "price": null,
      "address": "5000 W 29th Ave",
      "open_state": "Open · Closes 10 PM",
      "phone": "(303) 444-1633",
      "website": "https://www.applewoodfixit.com/",
      "description": null,
      "wheelchair_accessible": null,
      "action_links": [
        {
          "label": "Book online",
          "url": "https://book.servicetitan.com/lhxa271djh03w5bfje81s0qd"
        }
      ],
      "thumbnail": null,
      "sponsored": false,
      "url": "https://www.google.com/maps/place/?q=place_id:ChIJkWUJx22Ha4cRVVLq4AJk7Ng"
    }
    Recorded response. Live values differ.
  2. 02Deduplicate and filter

    Neighbouring cities return some of the same businesses, and sponsored listings repeat organic ones. Keep one row per place_id, drop sponsored, and filter on category, rating, or whether there is a website.

    GET /v1/search?engine=google_maps&q=plumbers+in+Denver&country=us · results.0.place_id

    "ChIJkWUJx22Ha4cRVVLq4AJk7Ng"
    Recorded response. Live values differ.
  3. 03Add the email from the business's website

    Maps has phones but no emails. The Website Contacts API reads the business's own site and returns the addresses it publishes, marking which are on its own domain, plus social profiles and a phone in E.164.

    GET /v1/contacts?domain=stripe.com · emails

    [
      {
        "value": "privacy@stripe.com",
        "type": "generic",
        "domain_match": true,
        "sources": [
          "https://stripe.com/privacy"
        ]
      }
    ]
    Recorded response. Live values differ.

Code

A script to start from

local_leads.py

# Local lead list: every business Google Maps lists for a category in each
# city, enriched with the email the business publishes on its website.
import csv, os, requests
from urllib.parse import urlparse

API = "https://api.clair.im"
HEADERS = {"Authorization": f"Bearer {os.environ['CLAIR_API_KEY']}"}
CATEGORY = "plumbers"
CITIES = ["Denver, CO", "Aurora, CO", "Boulder, CO"]

def get(path, **params):
    r = requests.get(f"{API}{path}", headers=HEADERS, timeout=120, params=params)
    r.raise_for_status()
    return r.json()

seen = set()
with open("leads.csv", "w", newline="") as f:
    out = csv.writer(f)
    out.writerow(["name", "category", "phone", "website", "email", "address",
                  "rating", "reviews", "place_id"])
    for city in CITIES:
        body = get("/v1/search", engine="google_maps", q=f"{CATEGORY} in {city}")
        for p in body["results"]:
            if p["place_id"] in seen or p["sponsored"]:
                continue  # neighbouring cities overlap; ads repeat organic listings
            seen.add(p["place_id"])
            email = None
            if p["website"]:
                try:
                    site = get("/v1/contacts", domain=urlparse(p["website"]).hostname, pages=3)
                    email = next((e["value"] for e in site["emails"] if e["domain_match"]), None)
                except requests.HTTPError:
                    pass  # site down or blocking; keep the Maps data
            out.writerow([p["title"], p["category"], p["phone"], p["website"], email,
                          p["address"], p["rating"], p["reviews_count"], p["place_id"]])

Set CLAIR_API_KEY to a key subscribed to the Google Maps API and Website Contacts API. Each call is one request against that API's monthly quota.

Cost

What it costs per month

ScheduleRequestsPlanPer monthPer 1,000
1 category × 20 cities, 600 websites20 searches, then about 30 unique businesses with a website per city = 600 lookups.620Pay as you go + Pay as you go$12.46$20.10
5 categories × 50 cities250 searches, about 30 websites each = 7,500 lookups.7,750Pay as you go + Pro$106.29$13.71
Maps only, 5 categories × 200 cities1,000 searches with phones and websites, no email step.1,000Pay as you go$20.10$20.10
The cheapest Clair plan for each volume: the monthly fee plus overage past the included requests. USD, before tax. The free tier covers 200 requests a month for trying the pipeline.

Limits

What to plan for

  • A Maps search covers the area the map shows. For a large city, split it by neighbourhood, or pass latitude, longitude, and zoom for each part.
  • Google sometimes gives signed-out visitors a limited view of a place. Search results still have phone and website; place details may be missing, and place.view says so.
  • Many small businesses publish only a contact form, so expect an email for a share of websites, not all. The phone from Maps covers the rest.
  • Check the rules for cold outreach where you sell. Published business contacts are still personal data in some jurisdictions.

FAQ

Common questions

How many businesses does one search return?

Every place the Maps list loaded, usually 20 to 70. Google stops loading more at some point, so a dense category in a big city needs several smaller searches.

Why not use Google's Places API?

You can: it is official and has a free monthly allowance. It returns at most 20 places per page and charges more for phone and website fields; the Google Places comparison has the numbers.

Are the emails verified?

They are published on the business's site, and sources says on which page. Clair does not send test email; run a verifier before a large campaign.

Related

Keep reading

APIs

  • Google Maps API
  • Website Contacts API

Glossary

  • Local pack
  • Google place ID
  • Lead enrichment
  • Role-based email address

Comparisons

  • Clair vs Google Places API: local business data compared
  • Clair vs Hunter: domain contact lookup compared

Run it on your own products

200 requests a month free on each API, no card. Enough to run the pipeline on a short list before choosing a plan.

Get API Key →Compare plans
Clair API

Live data APIs for search, news, jobs, marketplaces, companies, reviews, and website contacts. Each call fetches the page and returns clean JSON.

contact@serinlabs.com@clair_api

APIs

SERP & Search
  • Google Search API
  • Google Maps API
News & Media
  • Google News API
  • Bloomberg News API
  • Associated Press API
  • Reuters News API
Jobs & Hiring
  • Glassdoor API
  • Greenhouse Jobs API
  • Indeed Jobs API
E-commerce
  • Amazon Products API
Company Data & Reviews
  • Trustpilot Reviews API
  • Product Hunt API
  • Crunchbase API
Contact & Lead Data
  • Website Contacts API

Use cases

Ecommerce and reviews
  • Amazon price monitoring
  • Trustpilot review monitoring
  • MAP enforcement on Amazon
  • Amazon rating monitoring
  • Amazon category research
  • Trustpilot competitor benchmarking
Search and local
  • Google rank tracking
  • Local lead generation
  • Local SEO competitor audit
  • Grounding LLM answers in search results
  • Content research from People also ask
Leads and companies
  • Lead enrichment from company websites
  • Product Hunt launch tracking
  • Startup deal sourcing
  • Account research briefs
Jobs and hiring
  • Salary benchmarking
  • Job market analytics
  • Hiring signals for sales
  • Employer reputation tracking
News
  • Media monitoring
  • Financial news alerts
  • News corpus for research and RAG

Compare and learn

Comparisons
  • Clair vs SerpApi
  • Clair vs Google Places API
  • Clair vs Google Custom Search API
  • Clair vs Hunter
Glossary
  • SERP
  • SERP API
  • People also ask
  • Google place ID
  • ASIN
  • Buy Box
  • All 40 terms
Developers
  • Documentation
  • Quickstart
  • API catalog
  • Pricing
  • All resources
© 2026 Serin Technologies, LLC
  • Terms of Service
  • Privacy Policy