# Bing Maps Places Scraper (`fetch_cat/bing-maps-places-scraper`) Actor

Scrape public Bing Maps places by query and location with business contacts, ratings, coordinates, rank, and source provenance.

- **URL**: https://apify.com/fetch\_cat/bing-maps-places-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Lead generation, SEO tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.02 / 1,000 place 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Bing Maps Places Scraper

Use this **Bing Maps scraper** to export public business listings for local SEO, lead generation, competitor research, and market analysis. This Bing Maps places scraper searches multiple categories and locations in one run and returns deduplicated Bing Maps business data with contact details, ratings, coordinates, listing links, and rank provenance.

### Input example

```json
{
  "searchQueries": ["restaurants", "dentists"],
  "locations": ["Lisbon, Portugal"],
  "maxPlacesPerQuery": 20,
  "market": "en-US",
  "includeWebsite": true,
  "dedupeBy": "placeId"
}
```

### Output example

```json
{
  "placeId": "ypid:YN93943E0541A05534",
  "name": "Example Restaurant",
  "categories": ["Restaurant"],
  "address": "24 Example Street, Lisbon 1100-125",
  "locality": null,
  "region": null,
  "postalCode": null,
  "country": null,
  "phone": "+351 21 000 0000",
  "website": "https://example.com/",
  "rating": 4.3,
  "reviewCount": 1095,
  "latitude": 38.71146,
  "longitude": -9.13494,
  "bingMapsUrl": "https://www.bing.com/maps?osid=ypid%3AYN93943E0541A05534",
  "imageUrl": "https://www.bing.com/th?id=example",
  "isOpen": true,
  "searchQuery": "restaurants",
  "location": "Lisbon, Portugal",
  "rank": 1,
  "sourceUrl": "https://www.bing.com/maps?q=restaurants%20Lisbon%2C%20Portugal",
  "scrapedAt": "2026-08-06T14:00:00.000Z",
  "dedupeKey": "ypid:YN93943E0541A05534",
  "warnings": []
}
```

### Input settings

| Field | Description |
|---|---|
| `searchQueries` | Categories or free-form place searches. |
| `locations` | Cities, regions, or postal areas combined with each query. |
| `startUrls` | Optional Bing Maps search URLs containing a `q` parameter. |
| `maxPlacesPerQuery` | Maximum places per query/location pair, from 1 to 100. |
| `market` | Language-region code such as `en-US` or `pt-PT`. |
| `includeWebsite` | Whether to include business websites supplied by Bing. |
| `dedupeBy` | Deduplicate by `placeId`, `website`, or `nameAddress`. |

### Output fields

Every row contains these stable keys: `placeId`, `name`, `categories`, `address`, `locality`, `region`, `postalCode`, `country`, `phone`, `website`, `rating`, `reviewCount`, `latitude`, `longitude`, `bingMapsUrl`, `imageUrl`, `isOpen`, `searchQuery`, `location`, `rank`, `sourceUrl`, `scrapedAt`, `dedupeKey`, and `warnings`.

Bing may not supply every optional contact or address component for every place. Such values are returned as `null`; the Actor never fabricates them. `warnings` identifies important missing optional values.

### Use cases

- Build local business prospect lists from an alternative maps index.
- Track which businesses rank for category/location combinations.
- Compare local coverage across cities and markets.
- Enrich market research with public websites, phones, ratings, and coordinates.

### Pricing

The Actor uses pay-per-event pricing: one small start event per run and one `result` event for each unique place saved. See the live **Pricing** tab for your current account-tier rates.

### Input recipes

**Single market scan**

```json
{"searchQueries":["coffee shops"],"locations":["Austin, TX"],"maxPlacesPerQuery":50}
```

**Overlapping lead searches with website deduplication**

```json
{"searchQueries":["dentists","dental clinics"],"locations":["Boston, MA"],"dedupeBy":"website"}
```

### Tips and limits

- Use precise locations for locally relevant rankings.
- Result availability and optional fields depend on Bing Maps coverage.
- A run deduplicates overlapping results but preserves the rank and provenance of the first saved match.
- Large query batches may finish partially near the run timeout; already saved rows remain available.

### API

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~bing-maps-places-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["restaurants"],"locations":["Lisbon, Portugal"],"maxPlacesPerQuery":20}'
```

Use the Apify API client in JavaScript or Python with Actor ID `fetch_cat/bing-maps-places-scraper`.

### MCP and AI agents

Connect through [Apify MCP](https://mcp.apify.com/?tools=fetch_cat/bing-maps-places-scraper) to let an AI agent launch searches and consume structured place rows.

### FAQ

**What data can I export with Bing Maps scraper?** Each place can include its name, category, address, phone, website, rating, review count, coordinates, Bing Maps URL, image, rank, and query provenance.

**Can I run Bing Maps Places Scraper through an API, schedule, or MCP client?** Yes. Use the Apify API or MCP examples above, and create an Apify schedule for recurring exports.

**How much does it cost to use Bing Maps Places Scraper?** A run charges one start event and one result event per unique saved place. Current account-tier prices are always shown on the Pricing tab.

**Does it require a Bing Maps API key?** No. This Bing places scraper processes public Bing Maps search listings.

**Why are some fields null?** Bing does not expose every optional field for every listing or market.

**Can I use Bing Maps URLs?** Yes. Add public search URLs with a `q` parameter to `startUrls`.

**Does it scrape reviews?** It returns aggregate rating and review count when supplied, not individual review text.

### Related Actors

- [Bing Maps Places Scraper by Automation Lab](https://apify.com/automation-lab/bing-maps-places-scraper)
- [Google Maps Scraper](https://apify.com/fetch_cat/google-maps-scraper)
- [Apple Maps Scraper](https://apify.com/fetch_cat/apple-maps-scraper)

### Support

Open an issue from the Actor's **Issues** tab with your input and run URL. We investigate reproducible failures and source changes.

# Actor input Schema

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

Business categories or free-form searches, for example dentists or coffee shops.

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

Cities, regions, or postal areas combined with every search query.

## `startUrls` (type: `array`):

Optional Bing Maps search URLs containing a q parameter.

## `maxPlacesPerQuery` (type: `integer`):

Maximum number of places saved for each query/location pair.

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

Bing language and region, such as en-US, pt-PT, or de-DE.

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

Include the public business website when Bing supplies it.

## `dedupeBy` (type: `string`):

How overlapping query results are deduplicated across the run.

## Actor input object example

```json
{
  "searchQueries": [
    "restaurants"
  ],
  "locations": [
    "Lisbon, Portugal"
  ],
  "startUrls": [],
  "maxPlacesPerQuery": 20,
  "market": "en-US",
  "includeWebsite": true,
  "dedupeBy": "placeId"
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchQueries": [
        "restaurants"
    ],
    "locations": [
        "Lisbon, Portugal"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/bing-maps-places-scraper").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 = {
    "searchQueries": ["restaurants"],
    "locations": ["Lisbon, Portugal"],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/bing-maps-places-scraper").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 '{
  "searchQueries": [
    "restaurants"
  ],
  "locations": [
    "Lisbon, Portugal"
  ],
  "startUrls": []
}' |
apify call fetch_cat/bing-maps-places-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fetch_cat/bing-maps-places-scraper"
        }
    }
}

```

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/5Cj39JxPUdbOJCiOQ/builds/VP05vEsCESp6XUj9J/openapi.json
