# Google Maps New Business Finder (`coregent/google-maps-new-business-finder`) Actor

Find newly opened and recently listed local businesses on Google Maps. One row per qualified business with estimated opening date, source (Google label, earliest review, first-seen), confidence and signals. Filter by opening window, reviews and website; optional emails/socials.

- **URL**: https://apify.com/coregent/google-maps-new-business-finder.md
- **Developed by:** [Delowar Munna](https://apify.com/coregent) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 new business results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Maps New Business Finder

![Google Maps New Business Finder](https://raw.githubusercontent.com/coregentdevspace/google-maps-new-business-finder-assets/main/thumbnail-google-maps-new-business-finder.png "Google Maps New Business Finder")

**Newly opened & recently listed local businesses, with the evidence behind every lead**

Search any business category across any number of locations and get one row per **newly opened or early-stage business** on Google Maps. Every row tells you **when it probably opened, how we know, and how sure we are**: Google's own opening label, the date of its earliest review, or the first time your monitor saw it.

Built for agencies, web designers, local-SEO consultants, B2B suppliers and anyone who sells to businesses in their first months, when they are buying websites, ads, signage, software and services.

No Google API key, no Google login and no cookies needed.

### ✨ What you get

One row per qualified business:

- 🆕 **Estimated opening date** (`estimatedOpenedAt`) plus its **source** (`openingDateSource`) and **confidence** (`openingConfidence`)
- 🧭 **Business stage** (`NEW` / `EARLY_STAGE`) and the **new-business signals** behind it (`GOOGLE_OPENED_LABEL`, `RECENT_FIRST_REVIEW`, `FIRST_SEEN_RECENTLY`, `LOW_REVIEW_COUNT`, `NO_REVIEWS`, `PROFILE_IMMATURE`, `NO_WEBSITE`, `NO_SOCIALS`)
- 🔎 A plain-English **evidence trail**, e.g. `Oldest of 30/30 reviews checked (complete, dataforseo): 2026-08-25T22:34:56.000Z`
- 📍 **Business details**: name, category, address, coordinates, plus code, phone, website, rating, review count, Place ID, CID, Google Maps URL
- 🎯 **Lead signals**: no website, low review count, missing phone, no socials detected
- 📧 Optional **emails and social profiles** found on the business's own website
- 🔁 **Matched searches**: every search term × location that found the business (deduplicated, charged once)

### ❓ How it works

#### What counts as a new business?

A business whose opening evidence falls inside your **Opened within (days)** window (default 90). The evidence is checked in this order, strongest first:

| Source (`openingDateSource`) | What it is                                                                                                                                                                      | Confidence |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
| `GOOGLE_OPENED_LABEL`        | Google's own label on the listing: "Recently opened", "Opened 3 weeks ago", "Opened September 2026", or "Opening soon" / "Opens Wed Nov 12" for places that have not opened yet | `HIGH`     |
| `EARLIEST_REVIEW` (complete) | The oldest review, after checking **all** of the listing's reviews                                                                                                              | `MEDIUM`   |
| `EARLIEST_REVIEW` (partial)  | The oldest of the reviews Google showed us, when it didn't show all of them                                                                                                     | `LOW`      |
| `FIRST_SEEN`                 | The first time **your monitor** saw the listing (see Monitoring)                                                                                                                | `MEDIUM`   |
| `HEURISTIC`                  | No reviews, very few reviews, or a half-finished profile (BROAD mode only)                                                                                                      | `LOW`      |

**Contradicting evidence wins.** A listing with 3 reviews but one review from two years ago is **not** new, and it's dropped (and not charged). The exception is Google's own "recently opened" label, which wins over old reviews, because a re-opened or relocated business keeps its old reviews.

#### Is the opening date exact?

Only when Google gives one, through its opening label. Otherwise `estimatedOpenedAt` is an **estimate**: the business can't have been reviewed before it existed, so the earliest review is an upper bound on its opening date, not proof of it. Google shows signed-out visitors relative review dates ("a month ago"), so review-based dates are approximate (`earliestReviewDatePrecision: "APPROXIMATE"`) unless an exact timestamp was available (`"EXACT"`).

#### What does `openingDateSource` mean?

Which piece of evidence the estimated date came from (see the table above). `UNKNOWN` never appears on a delivered row: a business without usable evidence isn't returned.

#### What does confidence mean?

- `HIGH`: Google says so itself (opening label).
- `MEDIUM`: we checked every review, or your monitor saw the listing appear after its baseline run.
- `LOW`: partial review evidence or heuristics. Useful leads, but expect some established businesses that simply have few reviews.

#### How is the earliest review used?

For each candidate we read the reviews Google shows on the listing. If any of them is older than your window, the business is ruled out. If all of them are recent and they are **all** of the listing's reviews, the oldest one becomes the estimated opening date (`MEDIUM`). Google often shows signed-out visitors only a handful of reviews. When it does, the actor checks the full review history newest-first to find the true earliest review, and falls back to the visible sample (`LOW`, `earliestReviewComplete: false`) if that history isn't available.

#### Detection modes

| Mode                 | Qualifies on                                                                 |
| -------------------- | ---------------------------------------------------------------------------- |
| `STRICT`             | Google opening label, or a complete earliest-review date in the window       |
| `BALANCED` (default) | STRICT + partial earliest-review evidence + recently first-seen listings     |
| `BROAD`              | BALANCED + heuristics: no reviews, low review count (≤ 20), immature profile |

`STRICT` aims for the highest precision, and `BROAD` finds the most leads but includes more established businesses with thin profiles.

#### Can I filter the last 30 / 60 / 90 days?

Yes: set **Opened within (days)** to `30`, `60`, `90`, `180`, `365` or any value up to 3,650. Borderline cases are kept: "Opened September 2026" counts for a 30-day window until the end of September has passed.

#### Can I target low-review businesses?

Yes: **Min reviews** and **Max reviews** (default `0`–`30`; `0` max = no limit). A low max also makes runs much faster and cheaper, because places above it are skipped straight from the search results without opening their page.

#### Can I find businesses without websites?

Yes: turn on **Only businesses without a website**, or the opposite, **Only businesses with a website**. Every row also carries `leadSignals.noWebsite` / `hasWebsite`.

#### Can I monitor newly appearing listings?

Yes. Set a **Monitor key** (e.g. `melbourne-gyms`). The actor keeps a first-seen registry for that key in your Apify account:

- The **first run** with a new key is the **baseline**. It catalogues the market, so nothing is "first seen recently" yet.
- On later runs, a listing that appears for the first time gets `firstSeenAt` and the `FIRST_SEEN_RECENTLY` signal (BALANCED / BROAD).
- Turn on **Only places not seen in previous runs** to skip every listing the monitor already knows, which makes scheduled runs fast and returns only newcomers.

#### What does `firstSeenAt` mean?

The first time **this monitor** saw the listing. It is **not** an opening date: a long-standing business can surface for the first time because Google's results changed. That's why `FIRST_SEEN_RECENTLY` is kept separate from `GOOGLE_OPENED_LABEL` and is only `MEDIUM` confidence.

#### Why can Google results differ between runs?

Google Maps ranks and rotates results by relevance, popularity, viewport and time, so a repeated search doesn't return exactly the same set. New businesses tend to rank low under well-reviewed ones, which is why smaller locations (suburbs rather than whole cities) surface more of them. When a search fills Google's ~120-result list and you asked for more, the actor splits it into a 3×3 map grid automatically (**Search coverage** = `AUTO`). Google search coverage is never guaranteed to be complete.

#### Are emails / socials optional?

Yes. They're off by default. **Find emails** and **Find social profiles** crawl a qualified business's own website (homepage plus up to two contact/about pages) for email addresses and Facebook, Instagram, LinkedIn, X, YouTube and TikTok profiles. This runs only for delivered businesses that list a website.

#### How does pricing work?

Pay per result, with no start fee:

- **New business result**: charged once per qualified business delivered to the dataset.
- **Enriched business result** (add-on): charged only when you turn on emails/socials **and** the business's website was actually crawled.

You are **not** charged for old businesses scanned, places that are filtered out, duplicates, places already seen by your monitor, or failed lookups. A run that finds nothing costs nothing in results. Current prices, which can differ by Apify plan, are on the **Pricing** tab (this README deliberately doesn't quote figures). The actor respects the **Maximum cost per run** you set and stops cleanly when it is reached, delivering the lowest-review (most likely new) candidates first.

#### Can I schedule it weekly?

Yes. Create a task with a **Monitor key** and **Only places not seen in previous runs**, then schedule it weekly in Apify. Each run returns only listings that are new to the monitor and still pass your filters.

#### Can I use the API / MCP?

Yes. Run it from the Apify API, the JavaScript / Python clients, Make, Zapier, n8n, or any MCP-capable AI agent via the Apify MCP server.

```bash
curl -X POST "https://api.apify.com/v2/acts/coregent~google-maps-new-business-finder/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms":["dentist"],"locations":["Canberra, ACT, Australia"],"openedWithinDays":180}'
```

### ⚙️ Input examples

#### Minimal

The default input: two categories in one suburb, about 3 minutes. Suburbs surface far more new businesses than city centres.

```json
{
    "searchTerms": ["cafe", "restaurant"],
    "locations": ["Braddon, ACT, Australia"],
    "openedWithinDays": 90,
    "newBusinessMode": "BALANCED",
    "maxPlacesPerSearch": 100
}
```

#### Agency leads (new businesses without a website)

```json
{
    "searchTerms": ["dentist", "physiotherapist", "accountant"],
    "locations": ["Canberra, ACT, Australia"],
    "openedWithinDays": 180,
    "maxReviews": 30,
    "onlyWithoutWebsite": true,
    "newBusinessMode": "BALANCED"
}
```

#### Strict recent businesses

```json
{
    "searchTerms": ["restaurant"],
    "locations": ["Sydney, NSW, Australia"],
    "openedWithinDays": 60,
    "newBusinessMode": "STRICT"
}
```

#### Weekly monitoring

```json
{
    "searchTerms": ["gym"],
    "locations": ["Melbourne, VIC, Australia"],
    "onlyNewSincePreviousRun": true,
    "monitorKey": "melbourne-gyms",
    "newBusinessMode": "BALANCED"
}
```

#### With emails and socials

```json
{
    "searchTerms": ["cafe", "restaurant"],
    "locations": ["Braddon, ACT, Australia"],
    "openedWithinDays": 90,
    "includeEmails": true,
    "includeSocials": true
}
```

#### Multi-suburb hospitality scan

Four categories across four suburbs, a 6-month window and a slightly higher review ceiling: 16 searches, about 7 minutes. Our test runs returned 13–18 new businesses. This is the run behind the screenshot and sample below.

```json
{
    "searchTerms": ["cafe", "restaurant", "bakery", "bar"],
    "locations": [
        "Braddon, ACT, Australia",
        "Kingston, ACT, Australia",
        "Gungahlin, ACT, Australia",
        "Belconnen, ACT, Australia"
    ],
    "maxPlacesPerSearch": 60,
    "newBusinessMode": "BALANCED",
    "openedWithinDays": 180,
    "maxReviews": 50,
    "includeEmails": true,
    "includeSocials": true
}
```

### 📤 Output example

![Google Maps New Business Finder — all fields table view](https://raw.githubusercontent.com/coregentdevspace/google-maps-new-business-finder-assets/main/google-maps-new-business-finder-output-all-fields-table-view.png "Google Maps New Business Finder — all fields table view")

#### Full record (all fields)

A real row from the multi-suburb scan above: a Kingston bar that 3 of the searches found, delivered and charged once. Its full review history was checked, so the opening estimate rests on an exact earliest-review timestamp.

```json
{
    "rowType": "business",
    "name": "Bar Nova",
    "placeId": "ChIJA-FHOqNNFmsRKAhozpBp0XA",
    "cid": "8129394873039587368",
    "featureId": "0x6b164da33a47e103:0x70d16990ce680828",
    "googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJA-FHOqNNFmsRKAhozpBp0XA&hl=en",
    "category": "Restaurant",
    "categories": ["Restaurant"],
    "address": "Corner of Kennedy Street &, 39 Kennedy St, 5 Eyre St, Kingston ACT 2604, Australia",
    "latitude": -35.3167444,
    "longitude": 149.1414749,
    "plusCode": "M4MR+8H Kingston, Australian Capital Territory, Australia",
    "phone": "+61 409 310 030",
    "website": "https://barnova.com.au/",
    "rating": 4.9,
    "reviewsCount": 30,
    "businessStatus": "OPERATIONAL",
    "estimatedOpenedAt": "2026-08-25",
    "openingDateSource": "EARLIEST_REVIEW",
    "openingConfidence": "MEDIUM",
    "googleOpenedLabel": null,
    "isNewBusiness": true,
    "businessStage": "NEW",
    "qualificationStatus": "QUALIFIED_NEW",
    "newBusinessSignals": ["RECENT_FIRST_REVIEW"],
    "evidence": ["Oldest of 30/30 reviews checked (complete, dataforseo): 2026-08-25T22:34:56.000Z"],
    "earliestReviewAt": "2026-08-25T22:34:56.000Z",
    "earliestReviewDatePrecision": "EXACT",
    "earliestReviewRelative": "a month ago",
    "earliestReviewComplete": true,
    "reviewsChecked": 30,
    "firstSeenAt": null,
    "leadSignals": {
        "noWebsite": false,
        "hasWebsite": true,
        "lowReviewCount": false,
        "missingPhone": false,
        "noSocialsDetected": false
    },
    "emails": ["hello@barnova.com.au"],
    "primaryEmail": "hello@barnova.com.au",
    "socials": {
        "facebook": "",
        "instagram": "https://instagram.com/barnova.cbr",
        "linkedin": "",
        "twitter": "",
        "youtube": "",
        "tiktok": ""
    },
    "contactPageUrl": null,
    "enrichmentStatus": "SUCCESS",
    "searchTerm": "cafe",
    "location": "Kingston, ACT, Australia",
    "matchedSearches": [
        {
            "searchTerm": "cafe",
            "location": "Kingston, ACT, Australia"
        },
        {
            "searchTerm": "restaurant",
            "location": "Kingston, ACT, Australia"
        },
        {
            "searchTerm": "bar",
            "location": "Kingston, ACT, Australia"
        }
    ],
    "scrapedAt": "2026-10-14T11:12:59.639Z"
}
```

The dataset has three views of the same rows.

#### New businesses tab (overview)

When each business probably opened, how we know, and how sure we are.

```json
{
    "name": "Bar Nova",
    "businessStage": "NEW",
    "estimatedOpenedAt": "2026-08-25",
    "openingDateSource": "EARLIEST_REVIEW",
    "openingConfidence": "MEDIUM",
    "newBusinessSignals": ["RECENT_FIRST_REVIEW"],
    "category": "Restaurant",
    "address": "Corner of Kennedy Street &, 39 Kennedy St, 5 Eyre St, Kingston ACT 2604, Australia",
    "reviewsCount": 30,
    "rating": 4.9,
    "phone": "+61 409 310 030",
    "website": "https://barnova.com.au/",
    "earliestReviewAt": "2026-08-25T22:34:56.000Z",
    "firstSeenAt": null,
    "searchTerm": "cafe",
    "location": "Kingston, ACT, Australia",
    "googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJA-FHOqNNFmsRKAhozpBp0XA&hl=en"
}
```

#### Leads tab

Contact and lead-qualification fields. Emails and socials are filled only when you enable them.

```json
{
    "name": "Bar Nova",
    "category": "Restaurant",
    "phone": "+61 409 310 030",
    "website": "https://barnova.com.au/",
    "primaryEmail": "hello@barnova.com.au",
    "emails": ["hello@barnova.com.au"],
    "leadSignals.noWebsite": false,
    "leadSignals.lowReviewCount": false,
    "leadSignals.missingPhone": false,
    "leadSignals.noSocialsDetected": false,
    "socials.facebook": "",
    "socials.instagram": "https://instagram.com/barnova.cbr",
    "socials.linkedin": "",
    "contactPageUrl": null,
    "enrichmentStatus": "SUCCESS",
    "address": "Corner of Kennedy Street &, 39 Kennedy St, 5 Eyre St, Kingston ACT 2604, Australia",
    "googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJA-FHOqNNFmsRKAhozpBp0XA&hl=en"
}
```

#### Evidence tab

Why the business qualified: the Google label (if any), the earliest review, the first-seen date and the evidence trail.

```json
{
    "name": "Bar Nova",
    "qualificationStatus": "QUALIFIED_NEW",
    "openingDateSource": "EARLIEST_REVIEW",
    "openingConfidence": "MEDIUM",
    "googleOpenedLabel": null,
    "earliestReviewAt": "2026-08-25T22:34:56.000Z",
    "earliestReviewDatePrecision": "EXACT",
    "earliestReviewRelative": "a month ago",
    "earliestReviewComplete": true,
    "reviewsChecked": 30,
    "reviewsCount": 30,
    "firstSeenAt": null,
    "evidence": ["Oldest of 30/30 reviews checked (complete, dataforseo): 2026-08-25T22:34:56.000Z"],
    "matchedSearches": [
        {
            "searchTerm": "cafe",
            "location": "Kingston, ACT, Australia"
        },
        {
            "searchTerm": "restaurant",
            "location": "Kingston, ACT, Australia"
        },
        {
            "searchTerm": "bar",
            "location": "Kingston, ACT, Australia"
        }
    ],
    "placeId": "ChIJA-FHOqNNFmsRKAhozpBp0XA",
    "cid": "8129394873039587368"
}
```

#### Run summary

Each run also writes `RUN_SUMMARY` (key-value store) with search operations, places discovered, unique places, qualified NEW / EARLY_STAGE, not new, insufficient evidence, filtered out by reason, already seen, failures, scan-to-result ratio and stage timings. `DIAGNOSTICS` lists the verdict for every evaluated place, and `RETRY_INPUT` holds the search operations that failed (blocked / provider errors) so you can re-run just those. A page that times out or is blocked is retried on a fresh proxy session first. One failed search or place never fails the whole run, but if more than half of the searches still fail, the run is marked **failed** with a message pointing to `RETRY_INPUT`, so an outage is never mistaken for "no new businesses here". Rows already delivered stay in the dataset.

### ⚠️ Limitations

- Opening dates are **estimates** unless Google shows its own opening label, and that label is uncommon.
- Earliest review and first-seen are **signals, not official incorporation or opening dates**.
- Google search coverage is never guaranteed; results vary between runs and locations.
- A business with no reviews has no review date. It qualifies only through Google's label, your monitor, or BROAD mode.
- Businesses change and disappear; permanently closed listings are excluded.
- Label and review-date parsing is built for the English Google Maps interface (`language: "en"`).

### 🚦 Proxy policy

Use **Apify Datacenter** proxy (the default) or **no proxy** for normal runs. Both work reliably for Google Maps searches at this actor's conservative concurrency.

**Apify Residential proxy is not supported.** The actor fails at startup if `apifyProxyGroups` includes `RESIDENTIAL`. Reason: in pay-per-event actors, residential bandwidth is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own provider via the proxy editor's **Custom proxy URLs** field. That traffic goes through your provider, not Apify, and is unaffected:

```
http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777
```

### 🔗 Related Coregent actors

- **Google Maps Reviews Scraper**: every review for any place, with exact dates, reviewers and owner replies.
- **Google Maps Email & Social Enricher**: deeper email and social enrichment for any list of Google Maps businesses.
- **Google Maps Local Business Leads Scraper**: full local business lead lists with lead scoring.

### ⚖️ Compliance

This is an **unofficial** product and is not affiliated with, endorsed by or sponsored by Google. It processes **public business listing information only**: no logins, no private data. Estimated opening dates can be approximate, and first-review and first-seen dates are signals, not official incorporation dates. You are responsible for using the data lawfully, including privacy, anti-spam and marketing rules (e.g. GDPR, CAN-SPAM, the Australian Spam Act) in any outreach.

# Actor input Schema

## `searchTerms` (type: `array`):

Business categories to search, e.g. dentist, cafe, plumber, gym. Every term is searched in every location.

## `locations` (type: `array`):

Cities, suburbs or regions, e.g. Braddon, ACT, Australia. Suburbs and neighbourhoods surface far more new businesses than whole cities, where established, well-reviewed places dominate the results.

## `maxPlacesPerSearch` (type: `integer`):

How many Google Maps places to scan for each search term × location (before new-business qualification). Common values: 50, 100, 200, 500, 1000. Above ~120 the search is split into a map grid automatically, which takes noticeably longer.

## `searchCoverage` (type: `string`):

AUTO splits a search into a 3×3 map grid only when Google's result list fills up (≈120 places) and you asked for more. GRID always splits; SINGLE never does.

## `newBusinessMode` (type: `string`):

STRICT: Google's opening label or a complete earliest-review date. BALANCED (recommended): also partial review evidence and recent first-seen monitoring. BROAD: also low-review / no-review / immature-profile heuristics (lower precision).

## `openedWithinDays` (type: `integer`):

Only businesses whose opening signal falls within this many days. Common values: 30, 60, 90, 180, 365.

## `minReviews` (type: `integer`):

Skip businesses with fewer Google reviews than this.

## `maxReviews` (type: `integer`):

Skip businesses with more Google reviews than this. 0 = no upper limit. A low limit also makes runs faster: places above it are skipped straight from the search results.

## `includeNoReviewBusinesses` (type: `boolean`):

Keep listings with zero reviews. They have no review date, so they qualify only via Google's opening label, first-seen monitoring, or BROAD mode.

## `onlyWithoutWebsite` (type: `boolean`):

Keep only businesses with no website on Google Maps (agency / web-design prospects). Cannot be combined with “Only businesses with a website”.

## `onlyWithWebsite` (type: `boolean`):

Keep only businesses that list a website.

## `includePhone` (type: `boolean`):

Return the Google Maps phone number.

## `includeWebsite` (type: `boolean`):

Return the website URL listed on Google Maps.

## `includeEmails` (type: `boolean`):

Crawl each qualified business's website (homepage + contact/about pages) for email addresses. Billed as a separate add-on event, only when the website was actually crawled.

## `includeSocials` (type: `boolean`):

Collect Facebook, Instagram, LinkedIn, X, YouTube and TikTok profiles linked from the business website. Same add-on event as emails (charged once per crawled website).

## `onlyNewSincePreviousRun` (type: `boolean`):

With a Monitor key: skip every place this monitor has already seen, so scheduled runs return only newly appearing listings. Requires Monitor key.

## `monitorKey` (type: `string`):

Name for this monitor's first-seen registry, e.g. melbourne-gyms. Stored in your account and reused by every run with the same key. Enables firstSeenAt and the FIRST_SEEN_RECENTLY signal.

## `excludePlaceIds` (type: `array`):

Place IDs, CIDs or feature IDs to skip (e.g. existing customers).

## `language` (type: `string`):

Google Maps interface language (hl). Opening-label and review-date parsing is built for English, so keep en unless you need otherwise.

## `proxyConfiguration` (type: `object`):

Apify Datacenter proxy by default. Apify Residential is not supported (the run fails at start); use Custom proxy URLs for your own residential provider.

## Actor input object example

```json
{
  "searchTerms": [
    "cafe",
    "restaurant"
  ],
  "locations": [
    "Braddon, ACT, Australia"
  ],
  "maxPlacesPerSearch": 100,
  "searchCoverage": "AUTO",
  "newBusinessMode": "BALANCED",
  "openedWithinDays": 90,
  "minReviews": 0,
  "maxReviews": 30,
  "includeNoReviewBusinesses": true,
  "onlyWithoutWebsite": false,
  "onlyWithWebsite": false,
  "includePhone": true,
  "includeWebsite": true,
  "includeEmails": false,
  "includeSocials": false,
  "onlyNewSincePreviousRun": false,
  "monitorKey": "",
  "excludePlaceIds": [],
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per qualified new or early-stage business with estimated opening date, source, confidence and signals.

## `leads` (type: `string`):

Website presence, phone, emails and socials for outreach.

## `evidence` (type: `string`):

Why each business qualified.

## `runSummary` (type: `string`):

Counts by qualification status, filters, scan-to-result ratio and timings.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "cafe",
        "restaurant"
    ],
    "locations": [
        "Braddon, ACT, Australia"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("coregent/google-maps-new-business-finder").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": [
        "cafe",
        "restaurant",
    ],
    "locations": ["Braddon, ACT, Australia"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("coregent/google-maps-new-business-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "cafe",
    "restaurant"
  ],
  "locations": [
    "Braddon, ACT, Australia"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call coregent/google-maps-new-business-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,coregent/google-maps-new-business-finder"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CRq3PFxjbdRN1NPpE/builds/aUQ2Nmgs3iL8q1pv0/openapi.json
