Fiber AI
Search & discovery

Google Maps / Local Business Search

Find any local business in any geography, then let AI agents identify the owners and their contact info.

Local Business Search lets you search over Google Maps data to find local businesses, then uses AI agents to find the owners of those businesses and their contact info. It's one of Fiber's most differentiated capabilities, and everything below works the same from the dashboard or the API.

Why it's unique. Most B2B data competitors are LinkedIn-only, so they struggle with local/SMB businesses that have little or no LinkedIn presence: restaurants, contractors, repair shops, clinics, retailers. Fiber searches Google Maps directly and layers owner/contact discovery on top.

What it does

Given a search query (what kind of business) and a geography (where):

  1. Finds matching businesses on Google Maps: name, address, and business details Maps exposes (including phone numbers where available).
  2. Identifies the owners: AI agents work to find the owner/decision-maker behind each business.
  3. Finds their contact info: surfacing how to actually reach them.

In the dashboard, inputs are simple:

  • Project name: a label so you can find it later.
  • Search query: the business type (e.g., "Book stores", "Car Repair Shop").
  • Search strategy: how to cover geography (below).
  • Max locations to find: a cap on how many places come back (cost control).

Search strategies

Specific regions search over one or more areas, combined for coverage. Five region types can be mixed freely:

Region typeWhat it searchesExample
USA CitiesWithin one or more US citiesSan Francisco, CA
USA CountiesWithin one or more US countiesNew Hanover County, NC
USA Metro AreasWithin one or more metrosSelect any metros
CircleRadius around a center pointSan Francisco + within N miles
RectangleBounding boxNW corner + SE corner coordinates

Entire USA sweeps the whole United States automatically, no extra config. It's the maximal-coverage option for nationwide enumeration.

The API exposes circles and rectangles directly, plus the whole-USA sweep and a world-cities strategy for searching by country and city size outside the US. See Regional sweep for the request shapes.

Detail at scale

Naive map search forces a bad trade: go deep on a small area, or cast a wide net and get back only a handful of top results. Fiber's proprietary sweeping algorithms eliminate that trade — you get detailed coverage across the whole map at once, capturing the long tail of local businesses even on "Entire USA" projects, not just the densest spots.

Coverage also goes meaningfully deeper than Maps alone: cross-referencing additional company data during owner discovery means even businesses with thin online footprints resolve to reachable owners.

Delivery & export

Dashboard searches run asynchronously (large sweeps take time). Results land in the web app under Advanced Scrapes → Scrape Google Maps with immediate CSV export, and the matching webhooks fire when a job finishes (see Webhooks).

Using the API

We built the API in two speeds. Synchronous lookups answer in one call: a page of places for a query, one place's full detail, or its reviews. Async jobs cover the heavy work: a regional sweep that can return up to 10,000 businesses, and an AI agent run that finds owners and contact details for up to 500 businesses per request.

Sync or async?

You wantUseWhy
A quick answer for one query near one place ("dentists in Austin, TX")Places search (sync)Up to 20 places per page, 2 credits per page, inline
Everything matching a query across a region, a country, or the whole USARegional sweep (async)Up to 10,000 businesses per job, paged results
Full detail on a place you already havePlace details (sync)Hours, attributes, rating breakdown, sample reviews
Every review on a placePlace reviews (sync)Paged, sortable by relevance or newest
Owners, decision-makers, and contact details for businesses you already haveOwner & contact discovery (async)AI agent research, up to 500 businesses per request
The website domain for a list of companiesDomain lookup (async)Up to 400 companies per request

A common pipeline chains them: a regional sweep for the list, then owner & contact discovery on the businesses you want to reach.

Regional sweep (async)

Start a sweep with a query plus a strategy, or a googleMapsUrl copied from the address bar after searching on Google Maps (the search term and area are read from the link). Use one or the other, never both. Keep location out of query: "dominos pizza", not "dominos pizza in Chicago".

FieldNotes
queryThe search term, without location
strategywhole-usa, specific-areas, or world-cities (below)
googleMapsUrlAlternative to query + strategy
maxResults1–10,000, default 100
nameOptional project label

The three strategies:

StrategyWhat it coversShape
whole-usaA broad search across cities in the United States. Less exhaustive than a city-specific search{ "strategy": "whole-usa" }
specific-areasThe union of circles (center + radiusMiles, 1–250, default 25) and rectangles (northwestCorner + southeastCorner)unionAll array of regions
world-citiesCities in the countries and regions you pick, filtered by size tiercountriesAndRegions with unionAll / subtractAll; optional smallestCityTierID / largestCityTierID

For world-cities, countries use ISO alpha-3 codes (USA, GBR, FRA) and regional groups carry an X- prefix (X-EUROPE, X-LATAM). City tiers, from largest to smallest: mega, major, large, medium, minor, small, tiny.

curl -X POST https://api.fiber.ai/v1/google-maps-search/start \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "YOUR_API_KEY",
    "name": "Bay Area car repair",
    "query": "car repair shop",
    "maxResults": 500,
    "strategy": {
      "strategy": "specific-areas",
      "unionAll": [
        {
          "regionType": "circle",
          "center": { "latitude": 37.7749, "longitude": -122.4194 },
          "radiusMiles": 30
        }
      ]
    }
  }'

The response carries output.searchID. From there:

  1. Check progress. Send the searchID to the progress check. You get status (NOT_STARTED, RUNNING, COMPLETED, FAILED), totalPlacesFound, totalPlacesRequested, and percentageCompleted.
  2. Read results. The results read takes the same searchID plus pageSize (1–1,000, default 25) and cursor. Pass each response's nextCursor back as cursor; when it comes back null, you have everything.
curl -X POST https://api.fiber.ai/v1/google-maps-search/poll \
  -H "Content-Type: application/json" \
  -d '{ "apiKey": "YOUR_API_KEY", "searchID": "SEARCH_ID", "pageSize": 1000 }'

Each result includes placeId, name, address, latitude, longitude, description, website, rating, numReviews, primaryType, allTypes, priceLevel, phoneNumber, countryIsoCode, and googleMapsURL.

Rather than polling, you can subscribe to google_maps_search.completed and read results when it fires.

Places search, details, and reviews (sync)

Places search takes a query (a business name or a place type like "coffee shop") and an optional location: a city and state, a full address, or a ZIP code. Leave location out for unbiased results. Each call returns up to 20 places plus a nextPageToken for the next page.

curl -X POST https://api.fiber.ai/v1/google-maps/search \
  -H "Content-Type: application/json" \
  -d '{ "apiKey": "YOUR_API_KEY", "query": "coffee shop", "location": "Austin, TX" }'

Each place carries placeId, name, url, rating, reviewCount, phoneNumber, websiteUrl, address, categories, openingHours, coordinates, and thumbnailUrl.

Place details takes a placeId from any search result and adds the description, ratingBreakdown, attributes, and a sample of reviews to the fields above.

Place reviews takes a placeId and returns reviews (author, 1–5 rating, publishedAt, text, likeCount, photoUrls, reviewUrl) plus totalReviewCount and a nextPageToken. Set sortBy to relevance (the default) or newest on the first page; later pages keep the sort the first page used.

curl -X POST https://api.fiber.ai/v1/google-maps/reviews \
  -H "Content-Type: application/json" \
  -d '{ "apiKey": "YOUR_API_KEY", "placeId": "ChIJN1t_tDeuEmsRUsoyG83frY4", "sortBy": "newest" }'

Owner & contact discovery (async)

Hand our AI agent a list of businesses and it comes back with who runs them and how to reach them: business emails and phones, social links, and the people in the roles you ask for, with their own emails and phones.

Send up to 500 businesses per request in companies. Only companyName is required; companyWebsite, companyCity, companyState, companyCountryName, companyCountryCode, companyAddress, and context all sharpen the match, and context is the place to tell apart businesses with similar names. Then shape the output:

  • jobTitles: up to 6 titles to look for (e.g., "Owner", "CEO"). Omit it to skip the person search and get business-level contacts only.
  • strictJobTitleMatch: true to require exact role matches (default false).
  • contactPreferences: switch off any of companyEmails, companyPhones, personEmails, personPhones (all default true).
curl -X POST https://api.fiber.ai/v1/local-business-search/start \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "YOUR_API_KEY",
    "companies": [
      {
        "companyName": "Mission Auto Repair",
        "companyCity": "San Francisco",
        "companyState": "CA"
      }
    ],
    "jobTitles": ["Owner"]
  }'

The response returns a researchRunId. Runs take time: the reference estimates about 30 minutes. Read results with pageSize (default 25, max 1,000) and cursor/nextCursor; each read reports status (PENDING, RUNNING, COMPLETED, FAILED) and progress (completed out of total). Records arrive in data.observations:

LevelFields
BusinesscompanyName, domain, city, state, stateCode, countryName, country3LetterCode, address, context
Business contactsbusinessEmails, businessPhones, socialMediaLinks
Peoplename, role, otherInfo, emailAddress, phoneNumber, socialMediaLinks

Subscribe to local_business_search.completed to skip polling.

We charge 4 credits per business when the run starts, and businesses the run can't complete are refunded. Businesses that share a website domain are counted and charged once.

Domain lookup (async)

Domain lookup finds the website domain for each company in a list, and optionally its email domains. It's a general company-research tool rather than a Maps feature, and it fits a company-enrichment page better; it sits here for now because filling in missing websites is a common step before owner & contact discovery.

Send 1–400 companies in companyInfo (each needs a name; domain, country, state, city, address, description, and otherContext are optional, and findEmailDomains defaults to false) plus a required overAllContext describing what the companies have in common. The reference estimates about an hour for 150 companies. Poll with the returned domainAgentRunId, pageSize (1–100, default 10), and cursor; status moves through NOT_STARTED, STARTED, DONE, or FAILED, and each match carries a 0–10 confidence score with a rationale. domain_lookup.completed fires when the run finishes.

Webhooks

EventFires when
google_maps_search.completedA regional sweep finishes
local_business_search.completedAn owner & contact discovery run finishes
domain_lookup.completedA domain lookup finishes

Setup, signatures, and retries live on Webhooks.

Operations

OperationWhat it doesReference
Regional sweep (start)Starts an async search across circles, rectangles, the whole USA, or world citiesgoogle-maps-search
Regional sweep (check progress)Status, places found so far, and percent completecheck-google-maps-results
Regional sweep (read results)Pages through the places a sweep foundpoll-google-maps-results
Places searchUp to 20 places per page for a query and optional locationgoogleMapsSearch
Place detailsFull detail for one place IDgoogleMapsPlace
Place reviewsPaged reviews for one place IDgoogleMapsReviews
Owner & contact discovery (start)Starts an AI agent run for up to 500 businessesstartLocalBusinessSearch
Owner & contact discovery (poll)Status, progress, and paged business and people recordspollLocalBusinessSearch
Domain lookup (start)Starts a domain search for up to 400 companiesdomainLookupTrigger
Domain lookup (poll)Paged domain matches with confidence scoresdomainLookupPolling

Cost and rate limits

OperationCostRate limit
Regional sweep (start)3 credits per business with a phone number30/min
Regional sweep (check progress, read results)See chargeInfo120/min each
Places search2 credits per search120/min
Place details2 credits per place120/min
Place reviews2 credits per page120/min
Owner & contact discovery (start)4 credits per business10/min
Owner & contact discovery (poll)See chargeInfo120/min
Domain lookup (start)3 credits per company30/min
Domain lookup (poll)See chargeInfo120/min

Every response carries chargeInfo, the authoritative record of what a call cost. Going over a limit returns HTTP 429.

In the dashboard, every location with a phone number is charged, so set Max locations to find deliberately, especially on broad strategies like Entire USA or big multi-region projects. On the API, maxResults plays the same role: a sweep bills per business with a phone number, and the default of 100 keeps a first run small.

See Billing for credits and top-ups.

Credit amounts are defaults — custom pricing is available for bulk use cases.

Tips

  • Test your query on Google Maps first to confirm it returns what you expect. If the results look right, copy the URL and start a sweep from it.
  • Start with a small region and a modest cap (maxResults or Max locations to find), inspect results, then widen.
  • Prefer specific cities, metros, or circles over Entire USA unless you need national coverage. Whole-USA is broad but less exhaustive than a targeted area.
  • Poll async jobs about every 30 seconds, or use webhooks instead. Polling faster doesn't finish the job sooner and burns rate limit.
  • Pace sweep starts to 30 per minute and owner & contact discovery starts to 10 per minute; batch up to 500 businesses into each discovery request rather than sending them one at a time.
  • Read sweep results with pageSize: 1000 to page through large jobs in fewer calls.
  • Pass jobTitles only when you need people; without it, discovery skips the person search and returns business-level contacts.

Use cases

  • Local/SMB sales: lists of every qualifying business in a territory with owner contact info, which LinkedIn-only tools can't produce.
  • Field sales & franchising: map every business within a radius or set of metros.
  • Nationwide sweeps: enumerate an entire business category across the US.
  • Market sizing: count and compare density of a business type across cities, counties, and metros.
  • International expansion: sweep the major cities of a country or region before entering it.
  • Reputation monitoring: pull the newest reviews for a set of locations and watch what customers say.

Related: Webhooks, Using the UI, Billing.

On this page