# Bing Maps Scraper - Contacts, Ratings, Reviews & Photos (`zen-studio/bing-maps-scraper`) Actor

Extract business name, street address, phone, website, coordinates and category tree from Bing Maps. Add ratings, weekly opening hours, reviews and original full-size photos per place. Sweep a whole city by category or draw your own area. 36 fields per place. Export JSON, CSV or Excel.

- **URL**: https://apify.com/zen-studio/bing-maps-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** Lead generation, Travel, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.79 / 1,000 places

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?

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 Scraper | Business Leads, Contacts, Ratings, Reviews & Photos (2026)

<blockquote style="border-left:4px solid #4C945E;background:#F0FDF4;padding:12px 16px;margin:12px 0">
<span style="font-size:16px;font-weight:700;color:#1C1917">35 fields per place at 8,000 places/minute:</span> <span style="font-size:15px;color:#57534E">name, street address, phone, website, coordinates, category tree, ratings, weekly hours, reviews, and full-size photos. The fastest Bing Maps scraper on Apify.</span>
</blockquote>

<table>
<tr>
<td style="border:2px solid #4C945E;border-radius:8px;background:#F0FDF4;padding:14px 20px">
<span style="font-size:11px;font-weight:800;letter-spacing:1.5px;color:#4C945E;text-transform:uppercase">⚡ Benchmark</span>&nbsp;&nbsp;<span style="font-size:15px;color:#1C1917"><b>32,638 businesses across 4 cities, zero duplicates</b>. Street address on 100%, phone on 80%, website on 54%.</span>
</td>
</tr>
</table>

<table>
<tr>
<td colspan="6" style="padding:10px 14px;background:#4C945E;border:none;border-radius:4px 4px 0 0">
<span style="color:#FAFAF9;font-size:14px;font-weight:700;letter-spacing:0.5px">Zen Studio Maps Suite</span>
<span style="color:#E8F5E9;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Places, reviews, and routes across every major map provider</span>
</td>
</tr>
<tr>
<td style="padding:10px 10px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;background:#D3EDD9;border-right:none;border-top:none;vertical-align:top;width:16%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-NrhaGcIgNVy9fCV5b-mEAgbbceA8-bing-maps-scraper-logo.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/bing-maps-scraper" style="color:#4C945E;text-decoration:none;font-weight:700;font-size:12px">Bing Maps</a><br>
<span style="color:#4C945E;font-size:11px;font-weight:600">&#10148; You are here</span>
</td>
<td style="padding:10px 10px;border:1px solid #E7E5E4;background:#E8F5E9;border-right:none;border-top:none;vertical-align:top;width:16%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-vBUd2ObzJUemitHHP-IYaavrd0t8-google-maps-directions-api-logo.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/google-maps-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:12px">Google Maps</a><br>
<span style="color:#78716C;font-size:11px">Popular times</span>
</td>
<td style="padding:10px 10px;border:1px solid #E7E5E4;background:#E8F5E9;border-right:none;border-top:none;vertical-align:top;width:16%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-5bSvAQKSK3LPq9OXb-AgVhcT1mQC-apple-maps-scraper-logo.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/apple-maps-scraper-pro" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:12px">Apple Maps</a><br>
<span style="color:#78716C;font-size:11px">Phones, hours</span>
</td>
<td style="padding:10px 10px;border:1px solid #E7E5E4;background:#E8F5E9;border-right:none;border-top:none;vertical-align:top;width:16%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-fRSgBvgbsRB4o7t30-UkaIbH1Yhq-yandex-maps-scraper-logo.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/yandex-maps-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:12px">Yandex Maps</a><br>
<span style="color:#78716C;font-size:11px">Leads, reviews</span>
</td>
<td style="padding:10px 10px;border:1px solid #E7E5E4;background:#E8F5E9;border-right:none;border-top:none;vertical-align:top;width:16%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-NBmcHCtkUEhA0DNP3-SrXbUedsVm-2gis-scraper-api-logo.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/2gis-places-scraper-api" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:12px">2GIS Places</a><br>
<span style="color:#78716C;font-size:11px">Phones, emails</span>
</td>
<td style="padding:10px 10px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;background:#E8F5E9;border-top:none;vertical-align:top;width:16%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-y6Jak0F6vxdZew3b2-HljeTJZkhm-google-maps-directions-api-logo.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/google-maps-directions-api" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:12px">Directions</a><br>
<span style="color:#78716C;font-size:11px">Routes, ETA</span>
</td>
</tr>
</table>

#### Copy to your AI assistant

```
zen-studio/bing-maps-scraper on Apify. Scrapes Bing Maps business listings with contacts, ratings, weekly hours, reviews and full-size photos. Call ApifyClient("TOKEN").actor("zen-studio/bing-maps-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Provide location (free text) OR customGeolocation (GeoJSON), not both. Full spec: GET https://api.apify.com/v2/acts/zen-studio~bing-maps-scraper/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations
```

### Key Features

- **35 fields per place**: street address, phone, website, coordinates, the full category tree, and a stable place ID on every row.
- **Sweep a whole city, not the first page**: pick a category and a radius, and the search splits itself until the area is covered. Leave categories empty and it sweeps all 44 of them, so the full radius is covered rather than just the dense centre.
- **Enrichment is opt-in**: ratings, weekly opening hours, reviews, and full-size photos are collected per place and billed separately, so a plain contact list stays fast and cheap.
- **865 categories**: from broad roll-ups like `Health and medical` down to `Periodontist`. Type a category we do not recognise and you get a named error with suggestions, never a silently empty run.

### How to Scrape Bing Maps Data

#### Basic: every restaurant in a city centre

```json
{
    "categories": ["Restaurant"],
    "location": "Berlin, Germany",
    "searchRadiusKm": 5,
    "maxResults": 1000
}
```

#### Lead list: businesses with no website

```json
{
    "categories": ["Dentist", "Physical therapy"],
    "location": "Austin, Texas, USA",
    "searchRadiusKm": 15,
    "websiteFilter": "without_website",
    "maxResults": 500
}
```

#### Full detail: ratings, hours, reviews, and photos

```json
{
    "categories": ["Hotel"],
    "location": "Times Square, New York",
    "searchRadiusKm": 2,
    "includeDetails": true,
    "includeReviews": true,
    "includeDescription": true,
    "maxPhotosPerPlace": 20,
    "maxResults": 100
}
```

#### Custom area: draw the shape yourself

```json
{
    "categories": ["Cafe"],
    "customGeolocation": {
        "type": "Polygon",
        "coordinates": [[[13.36, 52.49], [13.45, 52.49], [13.45, 52.54], [13.36, 52.54], [13.36, 52.49]]]
    },
    "maxResults": 2000
}
```

Coordinate order is GeoJSON's own `[longitude, latitude]`. A Point, Polygon, Feature, or FeatureCollection all work, which is what geojson.io and most map-drawing tools export.

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `categories` | array | *(all businesses)* | What to collect. Broad roll-ups pull everything beneath them. Leave empty (or pass `__all__`) to sweep all 44 top-level categories, which covers the whole radius. |
| `location` | string | *required* | City, neighborhood, or address. Add a country when the name is ambiguous. |
| `searchRadiusKm` | integer | `5` | How far around `location` to search. Ignored when `customGeolocation` is set. |
| `customGeolocation` | object | *(none)* | GeoJSON area to search. Overrides `location`. |
| `maxResults` | integer | `100` | Stop after this many places. |
| `nameContains` | string | `""` | Keep only places whose name contains this text. |
| `searchMatching` | string | `all` | How strictly the name must match: `all`, `only_includes`, `only_exact`. |
| `websiteFilter` | string | `all` | `all`, `with_website`, or `without_website`. |
| `minRating` | string | `""` | Drop places below this rating. Unrated places are dropped too. |
| `includeDetails` | boolean | `false` | Adds rating, review count, weekly hours, open/closed now, hotel class, chain ID, and action link. Hours are available for about half of places. |
| `includeDescription` | boolean | `false` | Adds the business description and a claimed-by-owner flag. |
| `includeReviews` | boolean | `false` | Adds up to 3 recent reviews, the star breakdown, and provider totals. |
| `maxPhotosPerPlace` | integer | `0` | Photos per place, each with the original full-size image URL. |

Filters run after collection, so they never reduce what the run covers. `minRating` turns on `includeDetails` automatically, since ratings come from there.

### What Data Can You Extract from Bing Maps?

| Group | Fields |
|---|---|
| **Identity** | `placeId` `name` |
| **Categories** | `categories` `primaryCategory` `categoryId` `categoryIds` `categoryPath` |
| **Address** | `address` `addressComponents` `latitude` `longitude` |
| **Contact** | `phone` `website` `imageUrl` `actionType` `actionUrl` |
| **Ratings & hours** | `rating` `reviewCount` `reviewSource` `openState` `openStateText` `openingHours` `hotelClass` `chainId` |
| **Description** | `description` `claimed` |
| **Reviews** | `reviews` `reviewHistogram` `reviewProvider` |
| **Photos** | `photos` |
| **Extras** | `wheelchairAccessible` `transportHub` `searchCategory` `searchLocation` `scrapedAt` |

All 35 on every row. An enrichment you left off returns `null` or `[]`, never a missing key.

`actionUrl` is the booking link, not a copy of the website: Menu, Reservations (OpenTable), Appointments, Tickets, Admissions and Enroll all appear, and a third of them point somewhere `website` does not.

#### Output Example

One real row, nothing removed. Every one of the 35 keys is present.

```json
{
  "placeId": "YN1ACAC2BCB3C3AB63",
  "name": "McDonald's",
  "categories": [
    "Fast food restaurant",
    "Restaurant"
  ],
  "primaryCategory": "Fast food restaurant",
  "categoryId": 31002,
  "categoryIds": [
    31002,
    30000,
    30949
  ],
  "address": "1528 Broadway, New York, NY 10036, US",
  "addressComponents": {
    "street": "1528 Broadway",
    "city": "New York",
    "region": "NY",
    "postalCode": "10036",
    "countryCode": "US",
    "country": null
  },
  "latitude": 40.757712,
  "longitude": -73.985396,
  "phone": "(917) 409-5946",
  "website": "https://www.mcdonalds.com/us/en-us/location/NY/New-York/1528-Broadway/39147.html",
  "imageUrl": "https://www.bing.com/th?id=OLC.mDbUTLOyk7QxrQ480x360",
  "wheelchairAccessible": null,
  "transportHub": null,
  "rating": 2.0,
  "reviewCount": 57,
  "reviewSource": "Yelp",
  "openState": "Open",
  "openStateText": "Open 24 hours",
  "openingHours": [
    {
      "day": "Monday",
      "ranges": [
        {
          "start": "00:00:00",
          "end": "00:00:00"
        }
      ]
    },
    {
      "day": "Tuesday",
      "ranges": [
        {
          "start": "00:00:00",
          "end": "00:00:00"
        }
      ]
    },
    {
      "day": "Wednesday",
      "ranges": [
        {
          "start": "00:00:00",
          "end": "00:00:00"
        }
      ]
    },
    {
      "day": "Thursday",
      "ranges": [
        {
          "start": "00:00:00",
          "end": "00:00:00"
        }
      ]
    },
    {
      "day": "Friday",
      "ranges": [
        {
          "start": "00:00:00",
          "end": "00:00:00"
        }
      ]
    },
    {
      "day": "Saturday",
      "ranges": [
        {
          "start": "00:00:00",
          "end": "00:00:00"
        }
      ]
    },
    {
      "day": "Sunday",
      "ranges": [
        {
          "start": "00:00:00",
          "end": "00:00:00"
        }
      ]
    }
  ],
  "hotelClass": null,
  "chainId": "5824",
  "categoryPath": "30000.30949.31002",
  "actionType": "Menu",
  "actionUrl": "https://www.yelp.com/menu/mcdonalds-new-york-442?adjust_creative=microsoft&utm_campaign=action_link_view_menu&utm_medium=feed_v2&utm_source=microsoft",
  "description": "McDonald's USA, LLC, serves a variety of menu options made with quality ingredients to millions of customers every day. Ninety-five percent of McDonald's approximately 13,500 U.S. restaurants are owned and operated by independent business owners. For more information, visit www.mcdonalds.com, and follow us on social: X, Instagram, TikTok and Facebook.",
  "claimed": true,
  "reviews": [
    {
      "text": "Ordering was smooth but they forgot to put in my sauce. Loved that it was in Times Square.",
      "rating": 3.0,
      "author": "Mirei K.",
      "date": "Apr 19, 2026",
      "source": "Yelp",
      "url": "https://www.yelp.com/biz/mcdonalds-new-york-442?adjust_creative=microsoft&utm_campaign=yelp_feed&utm_medium=feed_v2&utm_source=microsoft&hrid=7lJCTsdKjFA5LqTFxE_9QQ",
      "liked": null,
      "disliked": null
    },
    {
      "text": "Bad service I order happy meals but missing items. Foods was cold. Service was slow. Nobody was there order stilk took long.",
      "rating": 1.0,
      "author": "Jamal R.",
      "date": "Apr 7, 2026",
      "source": "Yelp",
      "url": "https://www.yelp.com/biz/mcdonalds-new-york-442?adjust_creative=microsoft&utm_campaign=yelp_feed&utm_medium=feed_v2&utm_source=microsoft&hrid=fyA0HLOHjYl5jFh5afmLkA",
      "liked": null,
      "disliked": null
    },
    {
      "text": "I really don't understand how this mcds got any bad reviews. When you walk in, there are kiosks so you can place your order. Then with the receipt in hand, you can pass through to pick up your order …",
      "rating": 4.0,
      "author": "Natasha R.",
      "date": "Mar 19, 2026",
      "source": "Yelp",
      "url": "https://www.yelp.com/biz/mcdonalds-new-york-442?adjust_creative=microsoft&utm_campaign=yelp_feed&utm_medium=feed_v2&utm_source=microsoft&hrid=DCX6HCobbgEy9Bg_a6OKvg",
      "liked": null,
      "disliked": null
    }
  ],
  "reviewHistogram": [
    {
      "stars": 5,
      "percent": 6,
      "count": 2
    },
    {
      "stars": 4,
      "percent": 14,
      "count": 5
    },
    {
      "stars": 3,
      "percent": 22,
      "count": 8
    },
    {
      "stars": 2,
      "percent": 11,
      "count": 4
    },
    {
      "stars": 1,
      "percent": 47,
      "count": 17
    }
  ],
  "reviewProvider": {
    "name": "Yelp",
    "reviewCount": 57,
    "rating": 2.0,
    "url": "https://www.yelp.com/biz/mcdonalds-new-york-442?adjust_creative=microsoft&utm_campaign=yelp_feed&utm_medium=feed_v2&utm_source=microsoft"
  },
  "photos": [
    {
      "url": "http://a.mktgcdn.com/p/5CfAG3Mq6QkRVslIusXawUk_OUT4rpHNaED8f-dXcwQ/2998x2998.jpg",
      "thumbnailUrl": "https://www.bing.com/th?id=OLC.mDbUTLOyk7QxrQ480x360",
      "width": 2998,
      "height": 2998,
      "caption": "Provided by Bing Places for Business",
      "source": "a.mktgcdn.com"
    },
    {
      "url": "http://a.mktgcdn.com/p/a-1p1iIZikNMmnhZUmI_N-HHZDL4O8DFqHwCIeM_B_8/1180x664.jpg",
      "thumbnailUrl": "https://www.bing.com/th?id=OLC.A6SDFqQK9GcRQw480x360",
      "width": 1180,
      "height": 664,
      "caption": "Provided by Bing Places for Business",
      "source": "a.mktgcdn.com"
    },
    {
      "url": "http://a.mktgcdn.com/p/hcwmzgGyqgZlI-LBXBYh1nUDWju1pOW0CSnvRemvyzU/2998x2998.jpg",
      "thumbnailUrl": "https://www.bing.com/th?id=OLC.c+/g2XprHJV78w480x360",
      "width": 2998,
      "height": 2998,
      "caption": "Provided by Bing Places for Business",
      "source": "a.mktgcdn.com"
    }
    // ... 17 more photos
  ],
  "searchCategory": "Restaurant",
  "searchLocation": "New York, NY",
  "scrapedAt": "2026-08-24T13:41:07Z"
}
```

Three keys are `null` above because they are type-specific, not because they were dropped: `hotelClass` fills on hotels, and `wheelchairAccessible` and `transportHub` on transit stops.

Photo rows carry the original full-size image, not a re-hosted thumbnail. Both are given, so you can use whichever you need.

### Advanced Usage

Ready-made configurations for local SEO audits, agency prospecting, hotel market research, competitor tracking, and store-locator building.

#### Agency prospecting: businesses with no web presence

```json
{
    "categories": ["Auto repair", "Hair salon", "Restaurant"],
    "location": "Phoenix, Arizona, USA",
    "searchRadiusKm": 25,
    "websiteFilter": "without_website",
    "maxResults": 5000
}
```

#### Local SEO: only well-rated, currently-open competitors

```json
{
    "categories": ["Dentist"],
    "location": "Manchester, UK",
    "searchRadiusKm": 10,
    "minRating": "4.0",
    "includeDetails": true
}
```

#### Hotel research with photos and reviews

```json
{
    "categories": ["Hotel"],
    "location": "Lisbon, Portugal",
    "searchRadiusKm": 8,
    "includeDetails": true,
    "includeReviews": true,
    "maxPhotosPerPlace": 50,
    "maxResults": 300
}
```

#### Chain tracking: one brand across a metro area

```json
{
    "categories": ["Fast food restaurant"],
    "location": "Chicago, Illinois, USA",
    "searchRadiusKm": 30,
    "nameContains": "Subway",
    "searchMatching": "only_includes",
    "includeDetails": true
}
```

Every row carries `chainId`, so you can group locations by brand even when the names vary.

### Pricing: Pay Per Event

**$3.49 per 1,000 places** at the entry tier, dropping to **$2.79** on higher Apify plans. Enrichment is billed separately and only for places you actually keep.

| Event | Per 1,000 (Free) | Per 1,000 (Diamond) |
|-------|------------------|---------------------|
| Place scraped | $3.49 | $2.79 |
| Place details enriched | $1.99 | $1.29 |

Filtered-out places are never billed. A place that returns no detail data is not billed for details either.

### FAQ

**What is Bing Maps?**
Bing Maps is Microsoft's mapping and local-business service, the map layer behind Bing search and Windows. Its business index covers the same kind of local listings you would find on Google Maps: name, address, phone, website, category, opening hours, and aggregated ratings. This Actor collects those listings in bulk for a place and category you choose.

**How many places can I extract in one run?**
Up to 100,000. There is no per-page ceiling to work around: the search splits its own area until the region is covered, so a dense city centre and a quiet suburb both come back complete.

**How fast is it?**
3,000 places in 22 seconds on the contacts-only lane. Turning on details slows it to roughly 800 places per minute, because each place is then collected individually.

**Which categories can I use?**
865 of them, at two levels. Broad roll-ups such as `Retail`, `Health and medical`, or `Professional services` pull in everything beneath them; narrow ones such as `Periodontist` or `Japanese restaurant` stay tight. Type anything you like: an unrecognised category comes back as a clear error with close matches suggested, so a run never quietly returns nothing.

**How complete is the contact data?**
Measured on 32,638 places across Berlin, New York, London and Sao Paulo: street address 100%, phone 80%, website 54%, category tree 100%. About 88% of places carry a phone or a website in Europe and the US. Website coverage is the regional one: 67% in Berlin against 32% in Sao Paulo, which also means the "has a phone but no website" lead angle is far richer outside Western Europe (50% in Sao Paulo, 21% in Berlin).

**How many reviews do I get per place?**
Up to 3 recent reviews per place, plus the full star breakdown and the provider's total review count. Bing aggregates rather than hosts reviews, so the text comes from Tripadvisor (about two thirds of places) and Yelp (about a third); hotels also carry Booking.com and Expedia. If you need every review on a place, use the sibling scraper for the provider that holds them.

**Can I get hotel prices or room rates?**
No. Bing Maps does not expose nightly rates or availability anywhere in its place data, with or without stay dates. For hotel pricing, use [Ozon Travel Hotel Scraper](https://apify.com/zen-studio/ozon-travel-hotel-scraper) or [Wildberries Travel Scraper](https://apify.com/zen-studio/wildberries-travel-scraper).

**Do I need a Bing account or cookies?**
No. Give it a location and a category and run it.

**Does it cover countries outside the US?**
Yes. Coverage is global, and results are pinned to English so a run from any region returns `Closed` and `4.2` rather than the local-language equivalents.

**How do I export the data?**
JSON, CSV, Excel, XML, or HTML from the run's Storage tab, or through the Apify API. JSON preserves the nested fields (`addressComponents`, `openingHours`, `reviews`, `photos`) exactly; CSV and Excel flatten the address parts into columns and serialise the rest.

**What happens if my search finds nothing?**
The run tells you which of the two reasons applies. A handful of categories exist in Bing's vocabulary but hold no listings anywhere, and that reads identically to an empty area unless it is checked, so the run re-probes the area without the category filter and reports which it was.

**Is it legal to scrape Bing Maps business data?**
This Actor extracts publicly available business listings only, nothing behind a login. Business contact details are commercial rather than personal data in most jurisdictions, but reviewer names in the `reviews` field are personal data. You are responsible for complying with Microsoft's terms and with applicable data protection law (GDPR, CCPA).

**What is the free tier?**
Apify's standard free plan credit applies. There is no separate lifetime cap on this Actor, so free-plan users get the same features and the same speed as everyone else.

### More Zen Studio scrapers for maps & local data

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-vBUd2ObzJUemitHHP-IYaavrd0t8-google-maps-directions-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Google Maps**
  - [Google Maps Scraper](https://apify.com/zen-studio/google-maps-scraper)
  - [Google Maps Directions & Routes API](https://apify.com/zen-studio/google-maps-directions-api)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-5bSvAQKSK3LPq9OXb-AgVhcT1mQC-apple-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Apple Maps**
  - [Apple Maps Scraper](https://apify.com/zen-studio/apple-maps-scraper-pro)
  - [Apple Maps Directions & Route API](https://apify.com/zen-studio/apple-maps-directions-route-api)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-fRSgBvgbsRB4o7t30-UkaIbH1Yhq-yandex-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Yandex Maps Яндекс Карты**
  - [Yandex Maps Scraper](https://apify.com/zen-studio/yandex-maps-scraper)
  - [Yandex Maps Reviews Scraper](https://apify.com/zen-studio/yandex-maps-reviews-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-NBmcHCtkUEhA0DNP3-SrXbUedsVm-2gis-scraper-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **2GIS 2ГИС**
  - [2GIS Places Scraper](https://apify.com/zen-studio/2gis-places-scraper-api)
  - [2GIS Reviews Scraper](https://apify.com/zen-studio/2gis-reviews-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-EgDf0I1X8lNhCes2E-kpZCa398Jg-baidu-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Baidu Maps 百度地图**
  - [Baidu Maps Scraper](https://apify.com/zen-studio/baidu-maps-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-F5g6zADHgY9XgfKpv-uUDQtIEe9Q-naver-place-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Naver Map & Place 네이버 지도**
  - [Naver Map & Place Scraper](https://apify.com/zen-studio/naver-place-scraper)

### Support

- **Bugs**: Issues tab
- **Features**: Issues tab

### Legal Compliance

Extracts publicly available data. Users must comply with Microsoft's terms and data protection regulations (GDPR, CCPA).

***

*Bulk business listings from Bing Maps: contacts, ratings, hours, reviews, and photos, for lead generation and local market research.*

# Actor input Schema

## `categories` (type: `array`):

What kind of places to collect. Pick from the suggestions or type any category name: broad ones like <code>Health and medical</code> pull in everything beneath them (Doctor, Dentist, Physical therapy), narrow ones like <code>Dentist</code> stay tight.<br><br>Add several to collect them all in one run. <b>Leave empty to collect every business in the area</b>, which sweeps all 44 top-level categories so the whole search radius is covered.

## `location` (type: `string`):

Where to search. A city, neighborhood, or address: <code>Berlin, Germany</code>, <code>Soho, London</code>, <code>Times Square, New York</code>.<br><br>More specific is better. Add a country when the name is ambiguous: <code>Springfield</code> alone lands somewhere you did not intend.

## `maxResults` (type: `integer`):

Stop after this many places.

## `searchRadiusKm` (type: `integer`):

How far around <b>Location</b> to search, in kilometres. A city centre is well covered by <code>5</code>; a whole metro area needs <code>15</code>–<code>25</code>.<br><br>Ignored when you draw a <b>Custom search area</b>: the shape defines its own extent.

## `customGeolocation` (type: `object`):

GeoJSON defining the exact area to search. Accepts a Point, a Polygon, or a Feature / FeatureCollection wrapping them (what geojson.io and most map-drawing tools export). Coordinate order is <code>\[longitude, latitude]</code>.<br><br>When set, this overrides <b>Location</b>. A Point uses <b>Search radius</b>; a Polygon uses its own extent.

## `nameContains` (type: `string`):

Keep only places whose name contains this text. Leave blank to keep them all.

## `searchMatching` (type: `string`):

How strictly the place name has to match <b>Name contains</b>. Ignored when that field is blank.

## `websiteFilter` (type: `string`):

Keep places with a website, without one, or both. <b>Only places without a website</b> is the usual pick for agency lead lists.

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

Drop places rated below this. <b>Unrated places are excluded too</b>: a place with no rating cannot satisfy a minimum, and only about a third of places carry one.<br><br>Turns on <b>Place details</b> automatically, since ratings come from there.

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

Adds <b>rating</b>, <b>review count</b>, <b>review source</b>, <b>weekly opening hours</b>, <b>open/closed right now</b>, <b>hotel star class</b>, <b>chain ID</b> and the place's <b>action link</b> (menu, reservations, appointments or tickets).<br><br>Opening hours and open/closed status are available for roughly <b>half</b> of places; rating for about a third. Collected per place and billed separately, so a large run takes longer. Leave off if you only need contact details.

## `includeDescription` (type: `boolean`):

Adds the <b>business description</b> and a <b>claimed by owner</b> flag.<br><br>Available for roughly a quarter of places. The slowest of the enrichments, so prefer it for shortlists over bulk runs.

## `includeReviews` (type: `boolean`):

Adds up to <b>3 recent reviews</b> per place: text, reviewer name, star rating, date and a link to the full review, plus the <b>star breakdown</b> and the provider's total review count.<br><br>Reviews are sourced from <b>Tripadvisor</b> (about two thirds of places) and <b>Yelp</b> (about a third); hotels also carry Booking.com and Expedia. Available for roughly a third of places.

## `maxPhotosPerPlace` (type: `integer`):

How many photos to collect per place. Each photo comes with the <b>original full-size image URL</b>, pixel dimensions, a caption and the source site (Yelp, Booking.com, Tripadvisor, the hotel's own media library).<br><br><code>0</code> = no photos. Places carry a median of 17 photos, some over 100; asking for more than 20 slows the run.

## Actor input object example

```json
{
  "categories": [
    "Restaurant"
  ],
  "location": "Berlin, Germany",
  "maxResults": 100,
  "searchRadiusKm": 5,
  "nameContains": "",
  "searchMatching": "all",
  "websiteFilter": "all",
  "minRating": "",
  "includeDetails": false,
  "includeDescription": false,
  "includeReviews": false,
  "maxPhotosPerPlace": 0
}
```

# Actor output Schema

## `results` (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 = {
    "categories": [
        "Restaurant"
    ],
    "location": "Berlin, Germany",
    "maxResults": 100,
    "searchRadiusKm": 5,
    "searchMatching": "all",
    "websiteFilter": "all",
    "minRating": "",
    "includeDetails": false,
    "includeDescription": false,
    "includeReviews": false,
    "maxPhotosPerPlace": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/bing-maps-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 = {
    "categories": ["Restaurant"],
    "location": "Berlin, Germany",
    "maxResults": 100,
    "searchRadiusKm": 5,
    "searchMatching": "all",
    "websiteFilter": "all",
    "minRating": "",
    "includeDetails": False,
    "includeDescription": False,
    "includeReviews": False,
    "maxPhotosPerPlace": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/bing-maps-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 '{
  "categories": [
    "Restaurant"
  ],
  "location": "Berlin, Germany",
  "maxResults": 100,
  "searchRadiusKm": 5,
  "searchMatching": "all",
  "websiteFilter": "all",
  "minRating": "",
  "includeDetails": false,
  "includeDescription": false,
  "includeReviews": false,
  "maxPhotosPerPlace": 0
}' |
apify call zen-studio/bing-maps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/bing-maps-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/NrhaGcIgNVy9fCV5b/builds/0cBpRWMauxOYAzXsH/openapi.json
