# Bing Maps Local Business Finder (`dataspryva/bing-maps-local-business-finder`) Actor

Find restaurants, shops, hotels, and other local businesses on Bing Maps by keyword and city, or by a precise latitude/longitude and radius, with address, phone, website, rating, and coordinates.

- **URL**: https://apify.com/dataspryva/bing-maps-local-business-finder.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (community)
- **Categories:** Lead generation, Automation, Travel
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Bing Maps Local Business Finder

Build a clean list of local businesses from Bing Maps without opening a browser or signing in. Search by keyword and place, sweep a precise radius around a latitude/longitude, or look up exact places by ID or link. Every record carries the contact details Bing publishes, plus coordinates, rating and category. Turn on detail fields when you also need weekly hours, a description, amenities, recent reviews, rating breakdown and photos.

Bing retired its Local Search REST API in August 2025, so this actor reads the same public listing and detail panels that Bing Maps serves to visitors. No API key, Bing account or cookie is needed.

### Ways to search

- **Keyword + location** — `coffee shops` in `London`, `dentist` in `Manhattan, New York`, any category and place Bing recognises. Supply several queries and several locations in one run and they are combined into a queue.
- **Nearby radius** — centre on a latitude/longitude and set a radius in metres. Useful when you care about a point (a store, a venue, a neighbourhood centroid) rather than a city name.
- **Place details** — paste Bing place IDs (`ypid:...`) or full Bing Maps links and the actor returns those exact businesses, with the detail panel included.
- **Optional detail enrichment** — enable it for keyword or nearby searches to add one detail request per business.

Results are read page by page, deduplicated by listing ID, and stop when `maxItems` is reached or Bing stops returning new places. `rank` records where each business first appeared for its query, and `query`/`location`/`market` keep the provenance.

### What each record contains

Listing fields (always when Bing publishes them):

`listingId`, `placeId`, `name`, `category`, `categoryPath`, `address`, `phone`, `website`, `chainId`, `rating`, `reviewCount`, `ratingSource`, `lat`, `lon`, `openStatus`, `openHours`, `thumbnailUrl`, `url`, `rank`, `query`, `location`, `market`, `recordType`, `scrapedAt`.

Detail fields (when `includeDetails` is on):

- `hours` — Monday–Sunday rows, each `{ "day": "Monday", "hours": "7 am - 4 am" }`
- `description` — the business description shown in Bing's detail panel
- `attributes` — amenities and service labels such as "Outdoor seating" or "Free Wi-Fi"
- `reviews` — up to `maxReviews` recent reviews, each with author, rating, ISO date, text, source and original review link
- `ratingDistribution` — star buckets with count and percentage
- `photos` — Bing-hosted business photos
- `detailsFetched` — `true` when the detail panel was read

Fields Bing does not publish for a business are omitted, not sent as `null` or empty strings.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `search` | `search`, `nearbySearch` or `placeDetails` |
| `searchQueries` | string list | `[]` | One or more business searches; falls back to `coffee shops` when empty |
| `locations` | string list | `[]` | One or more cities, areas or addresses; falls back to `London` when empty |
| `placeIds` | string list | – | Place IDs or Bing Maps links for `placeDetails` |
| `latitude`, `longitude` | number | – | Centre point for `nearbySearch` |
| `radius` | integer | `1000` | Radius in metres (100–50000) for `nearbySearch` |
| `maxItems` | integer | `20` | Maximum records across the whole run (1–1000) |
| `market` | select | `en-US` | Bing language/region market |
| `minRating` | select | `0` | Keep only businesses at or above this rating |
| `openNow` | boolean | `false` | Keep only businesses Bing marks open now |
| `includeDetails` | boolean | `false` | Add hours, description, amenities, reviews and photos |
| `maxReviews` | integer | `3` | Reviews per business when details are on (0–20) |
| `proxyConfiguration` | proxy | Apify Proxy AUTO | Optional proxy settings |

#### Examples

Keyword and city:

```json
{
  "mode": "search",
  "searchQueries": ["coffee shops", "bakery"],
  "locations": ["London", "Manchester"],
  "maxItems": 40,
  "includeDetails": true,
  "maxReviews": 3
}
```

Nearby radius:

```json
{
  "mode": "nearbySearch",
  "searchQueries": ["restaurant"],
  "latitude": 51.5074,
  "longitude": -0.1278,
  "radius": 2000,
  "maxItems": 25
}
```

Exact places:

```json
{
  "mode": "placeDetails",
  "placeIds": [
    "ypid:YNA290932D99230C7A",
    "https://www.bing.com/maps/search?q=coffee+shops+London&secq=Bar+Italia&sece=ypid%3AYNA290932D99230C7A"
  ],
  "includeDetails": true,
  "maxReviews": 5
}
```

### Use cases

- Local lead generation with phone, website and address
- Comparing Bing's local coverage with another maps index
- Tracking rating and review-count changes over scheduled runs
- Enriching a CRM or directory with hours, amenities and coordinates
- Finding the businesses around a specific venue or site

### Limits and data notes

- Bing returns at most about 60 unique listings for one query and viewport; later pages repeat them. The actor deduplicates and stops at that source limit. Split by narrower categories or locations to go deeper.
- `minRating` and `openNow` are applied after fetching because Bing's direct listing endpoint does not accept them without a signed page session. A very restrictive filter can scan the full result set and still return fewer rows than `maxItems`.
- Detail fields depend on what Bing's providers publish for each business. Many listings have hours and reviews but no description or booking link.
- Addresses are the provider's single-line address. Bing does not expose reliable locality/region/postal fields for every market, so the actor does not guess them.
- Photo fields use Bing-hosted images so they stay reachable. Some listings have no photo.

### FAQ

**Do I need a Bing account or API key?**
No. The actor reads public Bing Maps pages.

**What is the difference between `search` and `nearbySearch`?**
`search` combines a keyword with a named place. `nearbySearch` uses a precise point and radius, so it works even where there is no useful place name.

**How do I get every business in a city?**
Run several narrower queries (subcategories or neighbourhood names) because Bing caps a single query at about 60 unique places.

**Why is `minRating` sometimes returning zero rows?**
No business in the fetched result set matched the rating, or none had a published rating. Lower the threshold or broaden the query.

**Should I use a proxy?**
Small runs usually work without one. Apify Proxy AUTO is the default to reduce rate limiting on larger runs; you can change it in the input.

**Is this affiliated with Microsoft or Bing?**
No. This is an independent third-party actor and is not endorsed by Microsoft.

# Actor input Schema

## `mode` (type: `string`):

Choose how to find businesses: by keyword and place, around a point, or by exact place IDs/links.

## `searchQueries` (type: `array`):

One or more business searches, e.g. 'coffee shops', 'dentist', 'hotel'. Each query is combined with every location.

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

Cities, areas or full addresses to search in, e.g. 'London', 'Manhattan, New York', 'Paris, France'.

## `placeIds` (type: `array`):

Used by 'Place details by ID or URL'. Paste Bing place IDs (ypid:...) or full Bing Maps links that contain a place ID or a place name.

## `latitude` (type: `number`):

Centre latitude for nearby search, e.g. 51.5074 for London.

## `longitude` (type: `number`):

Centre longitude for nearby search, e.g. -0.1278 for London.

## `radius` (type: `integer`):

How far around the centre point to search, in metres.

## `maxItems` (type: `integer`):

Maximum number of businesses to save across all queries and locations.

## `market` (type: `string`):

Bing market (language and region) used for results, addresses and hours.

## `minRating` (type: `string`):

Only keep businesses at or above this rating. Businesses with no rating are left out when a minimum is set.

## `openNow` (type: `boolean`):

Keep only businesses Bing marks as open at the time of the run.

## `includeDetails` (type: `boolean`):

Fetch each place's detail panel for weekly hours, description, amenities, reviews, rating breakdown, photos, menu and booking links. Slower because it adds one request per business.

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

How many recent reviews to include when detail fields are enabled. Set 0 for none.

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

Optional proxy. Apify Proxy AUTO is enabled by default to reduce the chance of rate limiting on large runs.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "coffee shops"
  ],
  "locations": [
    "London"
  ],
  "radius": 1000,
  "maxItems": 3,
  "market": "en-US",
  "minRating": "0",
  "openNow": false,
  "includeDetails": false,
  "maxReviews": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `items` (type: `string`):

Dataset containing all scraped Bing Maps business records.

# 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 = {
    "mode": "search",
    "searchQueries": [
        "coffee shops"
    ],
    "locations": [
        "London"
    ],
    "radius": 1000,
    "maxItems": 3,
    "market": "en-US",
    "minRating": "0",
    "openNow": false,
    "includeDetails": false,
    "maxReviews": 0,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/bing-maps-local-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 = {
    "mode": "search",
    "searchQueries": ["coffee shops"],
    "locations": ["London"],
    "radius": 1000,
    "maxItems": 3,
    "market": "en-US",
    "minRating": "0",
    "openNow": False,
    "includeDetails": False,
    "maxReviews": 0,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/bing-maps-local-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 '{
  "mode": "search",
  "searchQueries": [
    "coffee shops"
  ],
  "locations": [
    "London"
  ],
  "radius": 1000,
  "maxItems": 3,
  "market": "en-US",
  "minRating": "0",
  "openNow": false,
  "includeDetails": false,
  "maxReviews": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call dataspryva/bing-maps-local-business-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/bing-maps-local-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/VfLgU4ykJYuz6z5mp/builds/dJgtgQPdM213HBCHH/openapi.json
