Use case

Build a local business lead list with emails from Google Maps

Find local businesses on Google Maps with the emails, phones and social links found on their websites, as JSON ready for a CRM or outreach sheet.

Prepaid, no subscriptionREST or MCPOne key for models, data and agents
Google MapsWebsiteslovelyjsonitems[0]"name": "Bright Smile Dental""category": "Dentist""address": "120 Brickell Ave, Mia…"website": "brightsmile.example""email": "office@brightsmile.ex…"phone": "+1 305 555 0142"

If you sell to local businesses, such as dentists, gyms, restaurants or contractors, Google Maps already lists them, but the email address sits on each business's own website. Opening hundreds of sites to find it is where lead lists stall. Lovely Router does both steps. Send a business type and a location, get one JSON object per place with the emails, phones and social links found on its website, and pay per place from a prepaid balance. Call it from a script, your CRM import job or an AI agent with one API key.

Hand it to your AI agent

Copy this prompt into Claude Code, Cursor, Codex or any coding agent. It tells the agent where the docs are and how to use your API key.

Build a local business lead list with emails from Google Maps. Use the Lovely Router data tools: each returns JSON and is billed per result.

- Docs (read first): https://lovelyrouter.com/docs/tools/find.md and https://lovelyrouter.com/docs/tools/run.md
- Plan first: POST https://lovelyrouter.com/v1/tools/suggest with `{"task": "<my task in plain words>"}` (free). It returns the tools to run in order, each with an example `input`, the `input_required` fields, an estimated cost and a ready-made `run` request. Replace the example values with my task's; if a field is unclear, read the tool with GET https://lovelyrouter.com/v1/tools/<id>. To browse instead, POST https://lovelyrouter.com/v1/tools/discover searches the catalog.
- Show me the plan and its estimated cost (`total_est_cost_usd`) before running anything large.
- Run: POST https://lovelyrouter.com/v1/tools/<id>/run with `{"input": {...}, "max_results": N}`. A 200 has the finished run with `items`; a 202 means it is still running, so poll the `poll` path until `status` is `succeeded`, `failed`, `timed_out` or `stopped`.
- Only delivered results are billed. Keep max_results small on the first run, check the output, then scale up.
- If you support MCP, connect https://lovelyrouter.com/mcp instead (Streamable HTTP, same key; https://lovelyrouter.com/docs/tools/mcp.md) and use suggest_tools, get_tool and run_tool.
- Auth: read my API key from the LOVELY_API_KEY environment variable and send it as `Authorization: Bearer $LOVELY_API_KEY`. Never print or commit the key. If it is not set, ask me to create one at https://lovelyrouter.com/app/keys.
- Billing is prepaid: every call is charged to my balance, so test with a small request before running anything large.
- Every docs page is plain Markdown; the full index is https://lovelyrouter.com/llms.txt.

My task: <the inputs (links, keywords or accounts) and how many results you need>
01

How it works

010203
  1. Pick a business type and an area

    Choose one or more search terms, such as dentist, and a location such as a city. The search covers about radius kilometers around it.

  2. Run the tool with a cap

    Send the search to POST /v1/tools/google-maps-leads/run with maxResults and max_results. The run holds its maximum cost from your balance and returns the places as JSON.

  3. Load the list

    Filter out places without an email, deduplicate against your CRM, and import the rest. Keep the business name and address so reps can check the business before they write.

02

Get a lead list with one request

Google Maps leads with emails takes searchTerms and a location. One place is one result, and one run can return up to 200:

curl https://lovelyrouter.com/v1/tools/google-maps-leads/run \
  -H "Authorization: Bearer $LOVELY_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "input": {
      "searchTerms": ["dentist"],
      "location": "Miami, FL, USA",
      "maxResults": 3,
      "websiteFilter": "withWebsite"
    },
    "max_results": 3
  }'

A run still going after 60 seconds returns 202; Run a tool shows how to poll. websiteFilter keeps only places with a website (withWebsite), only places without one (withoutWebsite), or all.

03

What each place holds

Field groupWhat you get
BusinessThe local business listed on Google Maps
ContactsEmails and phone numbers found on its website
SocialSocial profile links found on its website

Use withoutWebsite to find businesses that have no site at all, which is a lead list in itself if you build websites.

04

Recipes

Prospect one trade in one city

Search plumber in your target city, keep places with a website, and hand the list with emails to the sales rep for the week.

Cover a broad category

Pass several terms in searchTerms, for example restaurants, cafe and bakery, and the results are merged into one deduplicated set. Each term surfaces different places.

Find businesses with no website

Set websiteFilter to withoutWebsite and pitch web design or listing services to them by phone.

Open a new territory

Run the same search for five cities in a script and compare how many places in each have an email, to decide where to start.

Enrich and clean

Run the emails through email-verify before the first campaign, so bounces do not hurt your sending domain.

Prefer plain words? Connect the MCP server and tell Claude Code or Cursor: "Find 100 dentists in Miami with a website, put name, phone, email and website in a CSV, and drop places with no email. Set max_results to 100."

You are responsible for using contact data lawfully: follow the privacy and anti-spam rules that apply where you and the recipients are.

06

What you pay

You pay per place: starting a run holds its maximum cost, the per-call fee plus the per-place fee times max_results, and the run settles to what it returned. The rest of the hold goes back to your balance. A run that fails or times out pays only for the places it delivered, and a run refused at the start costs nothing.

A list of 300 places is billed as 300 places. There is no subscription and no monthly minimum: top up from $5, and one balance pays for tools and models. The card above shows today's price; pricing lists every tool.

07

Frequently asked questions

?
How many leads can I get per search?+

A nearby search returns about 60 places at most for each search term, and one run can return up to 200 places. Use several search terms or several locations to build a bigger list.

Will every place have an email?+

No. Emails, phones and social links are the ones found on the business's own website, so places without a website or without a published address will not have one.

Can I search other countries and languages?+

Set location to any city or address and language to a language code such as en, de, fr, es, ja or zh. Place names and descriptions follow that language.

How is this different from the plain Maps search?+

google-maps-places returns the business listing: address, phone, rating and hours. This tool also collects the emails and social links from the business website.

Do I need a subscription?+

No. You add credit to a prepaid balance and each run draws it down. Failed runs pay only for the results they delivered, and nothing renews automatically.

Building a full pipeline? See lead generation, the tool catalog, and pricing.

One prepaid key for models, data and agents

No subscription. Top up, use what you need, see every charge in your logs.