# Bing Images Scraper 🖼️ Filters & 1,000s of Images per Search (`dz_omar/bing-images-scraper`) Actor

🖼️ Scrape Bing Images for any keyword — full-size image URLs, thumbnails, source pages, titles and dimensions. Filter by size, type, layout, color, license and date, and go past Bing's ~500-image limit automatically. Public data, no login.

- **URL**: https://apify.com/dz_omar/bing-images-scraper.md
- **Developed by:** [FlowExtract API](https://apify.com/dz_omar) (community)
- **Categories:** SEO tools, AI, Developer tools
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 image extracteds

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

**[Bing Images Scraper](https://apify.com/dz_omar/bing-images-scraper?fpr=smcx63)** searches **Bing Images** for any keyword and returns every matching image: the **full-size image URL**, the Bing thumbnail, the source page, the title and description, and the image's **width and height**. Filter by size, type, layout, color, license and date, and collect **thousands of images per search** instead of the roughly 500 Bing shows for a single query.

Perfect for **AI and computer-vision teams** building image datasets, **designers and marketers** sourcing visual references, and **SEO and brand-monitoring teams** tracking where images rank, without an API key or a Bing account.

### What does Bing Images Scraper do?

Give it one or more search queries and it returns a clean, de-duplicated list of Bing image results, ready for JSON, CSV or Excel.

- **Image URLs at scale** — full-size URLs plus thumbnails and the page each image was found on.
- **Past Bing's ~500-image limit** — ask for 2,000 or 5,000 images and the Actor keeps going automatically, without duplicates, and every image still matches your query and your filters.
- **Bing's own filters** — size (or a minimum width and height), image type, layout, color, people, date and license.
- **Region and safety** — 18 markets and all three SafeSearch levels.
- **Dimensions included** — width and height for each image, so you can filter your dataset without downloading a single file.

#### What data can you extract from Bing Images?

| Category | Fields |
|---|---|
| Image | `murl` (full-size image URL), `turl` (thumbnail URL), `md5`, `mid`, `cid` |
| Source | `purl` (page the image was found on), `_meta.domain`, `_meta.source_url` (Bing's page for the image) |
| Text | `t` (title), `desc` (description) |
| Size | `_meta.width`, `_meta.height` |
| Search context | `_meta.query`, `_meta.position`, `_meta.cell`, `_meta.market`, `_meta.safe_search`, `_meta.scraped_at` |

The record Bing returns for each image is delivered as it is, with only Bing's search-highlight markers removed from titles and descriptions. Everything the Actor adds sits under `_meta`.

#### Why use Bing Images Scraper on Apify?

Running it on Apify gives you **API access**, **scheduling**, **monitoring**, **integrations** (Make, Zapier, n8n, webhooks) and **proxy rotation** without managing infrastructure. A run of 100 images finishes in well under a minute, and a 5,000-image run in about ten minutes.

### How to scrape Bing Images

1. Open Bing Images Scraper in Apify Console.
2. Type your keywords into **Search queries**, one per line (for example `red car`).
3. Set **Max images per search**. Start small: `100`.
4. Optionally narrow the search with the image filters (size, type, layout, color, license, date).
5. Click **Start** and wait for the run to finish.
6. Download the results as JSON, CSV or Excel, or fetch them over the API.

### How much does it cost to scrape Bing Images?

You pay per image delivered. An image is never charged twice within a search, and notices (a search with no results, for example) are never charged.

| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Image extracted | $0.0025 | $0.0020 | $0.0016 | $0.0012 |

- **1,000 images** cost about **$2.50** at the highest tier price and **$1.20** on GOLD.
- Test with `maxResults: 10` first.
- Set a maximum cost per run in Apify and the Actor sizes the search to fit it.

### Input and output examples

#### Input

```json
{
    "queries": ["red car"],
    "maxResults": 2000,
    "imageType": "photo",
    "minWidth": 1920,
    "minHeight": 1080,
    "market": "us",
    "safeSearch": "moderate"
}
```

| Input value | What it does |
|---|---|
| `queries` | Each keyword is searched separately; duplicates are removed. |
| `maxResults` | Images per search (not a global total). `0` collects everything Bing returns. |
| `splitLargeSearches` | On by default. Goes past Bing's ~500-image limit when you ask for more. |
| `size`, `imageType`, `layout`, `color`, `people`, `datePosted`, `license` | Bing's image filters. Leave on `any` for no restriction. |
| `minWidth`, `minHeight` | Exact minimum size in pixels. Every image is checked, so nothing smaller is delivered or charged. |
| `market`, `safeSearch` | Where Bing searches from, and how strictly it filters adult images. |

#### Output

Each image is one record. Two real results for `red car`:

```json
[
    {
        "sid": "",
        "cturl": "",
        "cid": "khB7mYDh",
        "purl": "https://storage.googleapis.com/dodwkwtyszrcne/red-car-pictures-hd.html",
        "murl": "https://wallup.net/wp-content/uploads/2016/01/4270-Aston_Martin-car-red_cars.jpg",
        "turl": "https://ts4.mm.bing.net/th?id=OIP.khB7mYDhxl-GBTasq8jdgQHaEo&pid=15.1",
        "md5": "92107b9980e1c65f860536acabc8dd81",
        "shkey": "FliywhjLHIHA0j9TA/NMkkmyoVwgJrghK4gBrY7wBco=",
        "t": "Red Car Pictures Hd at Miguelina Cotten blog",
        "mid": "72E2EA19DDFA58B3FCAB7A4EBC1DD952116CD403",
        "desc": "Red Car Pictures Hd at Miguelina Cotten blog",
        "_meta": {
            "type": "image",
            "query": "red car",
            "position": 2,
            "page": 1,
            "cell": "all",
            "width": 1920,
            "height": 1200,
            "domain": "storage.googleapis.com",
            "market": "us",
            "safe_search": "moderate",
            "scraped_at": "2026-11-08T11:45:41Z",
            "source": "bing-images-scraper",
            "source_url": "https://www.bing.com/images/search?view=detailV2&ccid=khB7mYDh&id=72E2EA19DDFA58B3FCAB7A4EBC1DD952116CD403&thid=OIP.khB7mYDhxl-GBTasq8jdgQHaEo&mediaurl=https%3a%2f%2fwallup.net%2fwp-content%2fuploads%2f2016%2f01%2f4270-Aston_Martin-car-red_cars.jpg&exph=1200&expw=1920&q=red+car&FORM=IRPRST&selectedIndex=1&itb=0&adlt=moderate"
        }
    },
    {
        "sid": "",
        "cturl": "",
        "cid": "M/gD+M9K",
        "purl": "https://www.pexels.com/search/red car/",
        "murl": "https://images.pexels.com/photos/358189/pexels-photo-358189.jpeg?cs=srgb&dl=pexels-pixabay-358189.jpg&fm=jpg",
        "turl": "https://ts4.mm.bing.net/th?id=OIP.M_gD-M9KykXML2uT5Fda1gHaEg&pid=15.1",
        "md5": "33f803f8cf4aca45cc2f6b93e4575ad6",
        "shkey": "74T0NJIC1HIBj9jgAWFxGZRtKwm3AYEQCok9VF6G4oo=",
        "t": "Red Car Photos, Download The BEST Free Red Car Stock Photos & HD Images",
        "mid": "8A19D19F2058AA0C40E18772D15F9DB45F376DC3",
        "desc": "Red Car Photos, Download The BEST Free Red Car Stock Photos & HD Images",
        "_meta": {
            "type": "image",
            "query": "red car",
            "position": 3,
            "page": 1,
            "cell": "all",
            "width": 3473,
            "height": 2115,
            "domain": "pexels.com",
            "market": "us",
            "safe_search": "moderate",
            "scraped_at": "2026-11-08T11:45:41Z",
            "source": "bing-images-scraper",
            "source_url": "https://www.bing.com/images/search?view=detailV2&ccid=M%2fgD%2bM9K&id=8A19D19F2058AA0C40E18772D15F9DB45F376DC3&thid=OIP.M_gD-M9KykXML2uT5Fda1gHaEg&mediaurl=https%3a%2f%2fimages.pexels.com%2fphotos%2f358189%2fpexels-photo-358189.jpeg%3fcs%3dsrgb%26dl%3dpexels-pixabay-358189.jpg%26fm%3djpg&exph=2115&expw=3473&q=red+car&FORM=IRPRST&selectedIndex=2&itb=0&adlt=moderate"
        }
    }
]
```

(In the example, the long `source_url` is shortened by removing Bing's session parameters; the Actor returns the link exactly as Bing gives it.)

### Other Actors you might need

| Actor | What it adds |
|---|---|
| **[Yandex Reverse Image Search](https://apify.com/dz_omar/yandex-reverse-image-search?fpr=smcx63)** | Start from a picture instead of a keyword: find where an image appears online. |

### Frequently asked questions

#### Is it legal to scrape Bing Images?

The Actor collects publicly available search results, the same ones anyone sees in a browser, and respects the source's limits. Image URLs point to content owned by other people, so check the license and your local rules (including GDPR and CCPA where personal data is visible in an image) before reusing anything. This is not legal advice.

#### Do I need a Bing or Microsoft account or an API key?

No. Bing Images Scraper works from keywords alone. Microsoft retired the Bing Image Search API in 2025; this Actor needs no Azure key.

#### How many images can I get for one search?

Bing itself ends a single search after roughly 500 images. With **Go beyond Bing's ~500-image limit** switched on (the default) the Actor continues automatically; in testing, single keywords returned 2,500 or more distinct images. Very narrow searches run out sooner, and the Actor stops as soon as Bing has nothing new to give.

#### Does it download the images?

No. It returns image URLs, thumbnails, sizes and source pages. Download the files you need from those URLs, or pair it with your own pipeline.

#### Does the license filter guarantee I can reuse an image?

No. Bing's license filter reflects what the source page declares to Bing. Always confirm the license at the source before reusing an image.

#### Why is a width or height empty?

Bing occasionally shows no size for an image. The field is then `null`; the image is still delivered and billed as normal, and because its size cannot be checked it is not removed by a minimum width or height.

#### What does SafeSearch "Off" return?

Exactly what Bing returns with SafeSearch off, which can include explicit images for some queries. The default is Moderate.

#### Can I use Bing Images Scraper in Make, Zapier, n8n or my own code?

Yes. Use Apify's integrations, webhooks, the API or the client libraries for JavaScript and Python.

#### What happens if a run is interrupted?

The Actor saves its progress and picks up where it left off, without repeating or re-charging images it has already delivered.

#### Why did my run return fewer images than I asked for?

| Situation | What you see | What to do |
|---|---|---|
| Bing has no more images for that query and filters | The run ends early with a smaller dataset | Loosen a filter or broaden the query |
| A search returns nothing | One notice record with `_meta.type: "no_results"` (not charged) | Try different keywords or another market |
| Bing returns images smaller than your minimum width or height | They are skipped and never charged; if none qualify you get a `no_results` notice | Lower the minimum |
| Bing answers with results it has already given | The Actor asks again on a fresh connection, so this normally heals itself | If a run still ends early, run it again |
| Several filters are combined | Bing may have only a handful of matches, so the dataset is small | Loosen one filter |
| The run reached its time limit | One notice record with `_meta.type: "time_limit"` | Raise the run timeout, or lower `maxResults`, and run again |
| Your maximum cost per run was reached | The run stops after the last image it charged for | Raise the maximum cost per run |

### Support

- 🌐 **Website:** [flowextractapi.com](https://flowextractapi.com)
- 📧 **Email:** <flowextractapi@outlook.com>
- 💬 **GitHub:** [FlowExtractAPI](https://github.com/FlowExtractAPI)
- 💼 **LinkedIn:** [flowextract-api](https://www.linkedin.com/in/flowextract-api/)
- 🐦 **X (Twitter):** [@FlowExtractAPI](https://x.com/FlowExtractAPI)
- 📱 **Facebook:** [flowextractapi](https://www.facebook.com/flowextractapi)
- 🎵 **TikTok:** [@flowextractapi](https://www.tiktok.com/@flowextractapi)

### Legal & compliance

- **Public data only** — processes publicly available data.
- **Rate limiting** — respects source-service limits and terms of use.
- **Data protection** — no storage of personal information or unauthorized data collection.
- **Commercial use** — suitable for business intelligence and research.
- No affiliation with or endorsement by Microsoft or Bing is implied.

***

*Bing Images Scraper — by FlowExtract API. Turn any website into structured data.*

# Changelog

This Actor's version history is a separate document: https://apify.com/dz_omar/bing-images-scraper/changelog.md

# Actor input Schema

## `queries` (type: `array`):

One or more keywords to search Bing Images for, exactly as you would type them in the search box. Each query is searched separately.

Example: red car

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

Maximum images to collect for each query (not a global total). Set 0 to collect everything Bing returns. Bing itself ends a single search after roughly 500 images — keep 'Go beyond Bing's ~500-image limit' on to get more.

## `splitLargeSearches` (type: `boolean`):

Bing stops one search after about 500 images. When you ask for more than that, the Actor re-runs the same query narrowed by Bing's own filters you have left open (size, image type, layout, colour) and combines the results, without duplicates. Every image still matches your query and your filters. It only adds work when one plain Bing search cannot supply your 'Max images per search'.

## `size` (type: `string`):

Bing's size filter. Ignored when a minimum width or height is set below.

## `minWidth` (type: `integer`):

Only images at least this wide. 0 = no minimum. The Actor checks the size of every image itself, so an image smaller than your minimum is never delivered or charged, even when Bing returns one. Setting a minimum width or height replaces the 'Image size' choice above.

## `minHeight` (type: `integer`):

Only images at least this tall. 0 = no minimum. Checked on every image, like the minimum width. If nothing on Bing is that large you get a single notice and are not charged.

## `imageType` (type: `string`):

Kind of image, as in Bing's 'Type' filter.

## `layout` (type: `string`):

Aspect ratio of the image.

## `color` (type: `string`):

Dominant colour, as in Bing's 'Color' filter.

## `people` (type: `string`):

Only images of faces or head-and-shoulders portraits.

## `datePosted` (type: `string`):

How recently Bing discovered the image.

## `license` (type: `string`):

Bing's licence filter. It reflects what the source page declares to Bing — always check the licence at the source before reusing an image.

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

Country and language Bing searches in. It changes which images rank first, and the language of titles.

## `safeSearch` (type: `string`):

Bing's SafeSearch level. 'Off' can return explicit images for some queries.

## Actor input object example

```json
{
  "queries": [
    "red car"
  ],
  "maxResults": 100,
  "splitLargeSearches": true,
  "size": "any",
  "minWidth": 0,
  "minHeight": 0,
  "imageType": "any",
  "layout": "any",
  "color": "any",
  "people": "any",
  "datePosted": "any",
  "license": "any",
  "market": "us",
  "safeSearch": "moderate"
}
```

# Actor output Schema

## `images` (type: `string`):

Every delivered image record.

# 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 = {
    "queries": [
        "red car"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dz_omar/bing-images-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 = { "queries": ["red car"] }

# Run the Actor and wait for it to finish
run = client.actor("dz_omar/bing-images-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 '{
  "queries": [
    "red car"
  ]
}' |
apify call dz_omar/bing-images-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dz_omar/bing-images-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/NFXEof9DEZ4aePtPu/builds/JMtZweslVvglbYknN/openapi.json
