# Bing Jobs Scraper — Job Postings From Every Board Bing Indexes (`sian.agency/bing-jobs-scraper`) Actor

Scrape Bing Jobs: one search returns postings from LinkedIn, ZipRecruiter, Monster, CareerBuilder, Glassdoor and more. Each job lists every board carrying it, with the full description, apply links and the exact posting date.

- **URL**: https://apify.com/sian.agency/bing-jobs-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Jobs, Lead generation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.64 / 1,000 search jobs

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 Jobs Scraper — Job Postings From Many Boards 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store-Jobs Search API](https://img.shields.io/badge/Store-Jobs%20Search%20API-1AE392)](https://apify.com/sian.agency/jsearch-jobs-scraper?fpr=sian) [![Store-LinkedIn Jobs Scraper](https://img.shields.io/badge/Store-LinkedIn%20Jobs%20Scraper-0077B5)](https://apify.com/sian.agency/linkedin-jobs-scraper?fpr=sian) [![Store-Glassdoor Scraper](https://img.shields.io/badge/Store-Glassdoor%20Scraper-0CAA41)](https://apify.com/sian.agency/glassdoor-data-scraper?fpr=sian)

#### 🎉 One search, every board Bing indexes: LinkedIn, ZipRecruiter, Monster, CareerBuilder, Glassdoor and more

##### Built for recruiters, job boards and hiring-data teams who want one job feed instead of five scrapers

### 🔎 What is the Bing Jobs Scraper — and when should you use it?

The **Bing Jobs Scraper** turns job postings from every board Bing indexes, with all the boards carrying each one into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** job postings as rows from one search that covers many job boards at once: title, employer, location, the exact posting and expiry dates, the full description, and every board carrying the posting with its own apply link. Bing already merges a posting listed on LinkedIn, ZipRecruiter, Monster or CareerBuilder into one row, so you get one feed without scraping each board and de-duplicating it yourself.

**Use something else when:** you need salaries, or one specific board in depth. Use [Jobs Search API](https://apify.com/sian.agency/jsearch-jobs-scraper?fpr=sian) for Indeed, LinkedIn and Glassdoor through Google for Jobs, with salary estimates by title and company. Use [ZipRecruiter Jobs Scraper](https://apify.com/sian.agency/ziprecruiter-jobs-scraper?fpr=sian) for ZipRecruiter postings in depth, including the salary ranges ZipRecruiter publishes. Use [Glassdoor Scraper](https://apify.com/sian.agency/glassdoor-data-scraper?fpr=sian) for employer reviews, salary reports and interview notes rather than open roles. Bing publishes no salary field, so this actor returns no salary column; pay appears only where the employer wrote it into the description. One search reaches at most 50 pages of 10 jobs, about 500, so a broader pull has to be split by city or by narrower titles.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/bing-jobs-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want job postings from many boards in one run, with apply links and exact posting dates using the Apify Actor `sian.agency/bing-jobs-scraper`.

Use it when I need: job postings as rows from one search that covers many job boards at once: title, employer, location, the exact posting and expiry dates, the full description, and every board carrying the posting with its own apply link. Bing already merges a posting listed on LinkedIn, ZipRecruiter, Monster or CareerBuilder into one row, so you get one feed without scraping each board and de-duplicating it yourself.

Don't use it when: you need salaries, or one specific board in depth — use jsearch-jobs-scraper or ziprecruiter-jobs-scraper or glassdoor-data-scraper instead.

How to call it: pick one `operation` per run. `search` finds jobs: give it `query` (a job title works best) and optionally `location` such as "Austin, TX", a two-letter `country`, and `maxResults` up to 500. `datePosted`, `employmentTypes`, `remoteOnly` and `radiusMiles` (10, 20, 30 or 40) narrow the results, and `excludePublishers` drops boards you already collect, such as LinkedIn. `includeDescriptions` is on by default and costs nothing extra; turning it off makes a run about 3x faster but leaves out the description and apply links. `jobDetails` re-checks up to 20 ids per call from `jobIds` and returns only postings Bing still serves. It is billed per id, so use it to check a shortlist, not to collect jobs a search already returns.

Start with this input:
{
  "operation": "search",
  "query": "software engineer",
  "location": "Austin, TX",
  "datePosted": "week",
  "maxResults": 50
}

Ask me which job title I want, which city or country, and whether I need only recent postings, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Find remote contract data engineer jobs posted this week and list which boards carry each one.*
- *Pull 200 registered nurse jobs in London and leave out the ones listed on LinkedIn.*
- *Re-check these 20 saved job ids and tell me which postings have closed.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/bing-jobs-scraper.md](https://apify.com/sian.agency/bing-jobs-scraper.md).

### 📋 Overview

**Bing Jobs already merges the job boards for you.** Bing's job search pulls postings from LinkedIn, ZipRecruiter, Monster, CareerBuilder, Glassdoor, Jooble, Adzuna and others, and folds a posting listed on several of them into one result. This actor turns that search into clean rows: title, employer, location, exact posting and expiry dates, the full description, and every board carrying the posting with its own apply link.

**What you get:**

- ✅ **Many boards, one row per posting**: a job listed on ZipRecruiter and Jooble arrives once, with both boards and both apply links
- 📄 **Full descriptions included**: every search row carries the complete job description (2,800 to 16,400 characters in our test runs) at no extra charge
- 🗓️ **Exact dates**: posting and expiry timestamps in UTC, next to Bing's own "6 days ago" badge
- 🎚️ **Bing's own filters**: date posted, employment type, remote only and distance, plus a filter that leaves out boards you already collect
- 💰 **Pay per job**: $0.003 per job on the Bronze plan, and nothing for jobs your filters removed or searches that found nothing
- 🔁 **Same columns as our other job scrapers**: the shared fields use the same names as our Jobs Search API and LinkedIn Jobs Scraper, so the rows merge without remapping

***

### ✨ Features

- 🔍 **Search Jobs**: keyword plus location, in any country Bing runs a jobs index for (us, gb, de, fr, ca, au and more)
- 📰 **Board coverage on every row**: jobPublisher names where the posting was found, jobPublishers lists every board carrying it
- 🔗 **Apply links per board**: applyOptions holds one apply link for each board, decoded to the board's own URL
- 🗓️ **Date filters**: past 24 hours, 3 days or week, using Bing's own filters (Bing applies them loosely, so check postedAtUtc when the window must be strict)
- 💼 **Employment types**: full-time, part-time, contract and internship
- 🏠 **Remote only**: Bing's own work-from-home filter
- 📏 **Distance**: within 10, 20, 30 or 40 miles of the location
- 🚫 **Leave out job boards**: drop LinkedIn, Indeed or any board you already scrape directly
- 📋 **Job Details**: re-check up to 20 saved job ids per call and see which postings are still open
- 🧭 **Normalized titles and company ids**: normalizedTitle and bingCompanyId group title variants and postings by employer

***

### 🎬 Quick Start

Pick Search Jobs, type a job title and a location, and press Start. A run of 20 jobs finishes in well under a minute. Export the rows as JSON, CSV or Excel, or pull them over the API.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~bing-jobs-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "search", "query": "software engineer", "location": "Austin, TX", "maxResults": 50}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose an operation

Search Jobs to find postings, or Job Details to re-check job ids you saved from an earlier run.

#### Step 2: Describe the job

Type a job title in Search keyword and a place in Location, for example "registered nurse" and "London" with country code gb.

#### Step 3: Run it and open your dataset

Press Start. Rows appear in the dataset as they arrive, and the run report lists every job with its apply link.

**That's it! In under a minute, you'll have:**

- Job postings with title, employer, location and exact posting date
- Every job board carrying each posting, with an apply link for each
- The full job description on every row

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| operation | string | No | search (default) or jobDetails |
| query | string | For Search Jobs | Job title or phrase, e.g. "software engineer" |
| location | string | No | City, region or country, e.g. "Austin, TX" |
| country | string | No | Two-letter country code that picks Bing's national index (default us) |
| datePosted | string | No | all, today, 3days, week or month |
| employmentTypes | array | No | FULLTIME, PARTTIME, CONTRACTOR, INTERN |
| remoteOnly | boolean | No | Only remote and work-from-home jobs |
| radiusMiles | string | No | 10, 20, 30 or 40 miles from the location |
| excludePublishers | array | No | Job boards to leave out, e.g. LinkedIn |
| jobIds | array | For Job Details | Job ids from an earlier Search Jobs run, up to 20 per call |
| includeDescriptions | boolean | No | Full description and apply links (default on) |
| maxResults | integer | No | Up to 500 jobs per search (default 20) |

**Search example:**

```json
{
  "operation": "search",
  "query": "data engineer",
  "location": "Chicago, IL",
  "datePosted": "week",
  "employmentTypes": ["CONTRACTOR"],
  "remoteOnly": true,
  "maxResults": 100
}
```

**Job Details example:**

```json
{
  "operation": "jobDetails",
  "jobIds": [
    "YmluZzotMTU3NzQ5MTk1MC5SZXRybw",
    "-1941068330.Retro"
  ]
}
```

***

### 📤 Output

Each row is one job posting with **30 fields**. The most useful ones:

| Field | Type | Description |
|-------|------|-------------|
| jobTitle | string | Job title as posted |
| employerName | string | Hiring company |
| employerLogo | string | Employer logo image |
| location | string | Location as Bing shows it |
| postedAtUtc | string | Posting date and time in UTC |
| expiresAtUtc | string | When Bing expires the posting |
| jobPublisher | string | The board the posting was found on |
| jobPublishers | array | Every board carrying the posting |
| applyLink | string | Apply link on the first board |
| applyOptions | array | One apply link per board |
| jobDescription | string | Full job description |
| employmentType | string | Bing's label, e.g. Full-time or Contract |
| isRemote | boolean | Marked remote by Bing |
| normalizedTitle | string | Normalized title for grouping |
| bingCompanyId | string | Bing's company id for grouping by employer |
| jobId | string | Id to pass to Job Details later |

**Example:**

```json
{
  "jobId": "YmluZzotMTU3NzQ5MTk1MC5SZXRybw",
  "jobTitle": "Staff Software Engineer - Developer Experience",
  "employerName": "General Motors",
  "employerLogo": "https://th.bing.com/th/id/OJA.69516802NS?w=24&h=24&o=6&pid=JobAns",
  "jobPublisher": "ZipRecruiter",
  "jobPublishers": ["ZipRecruiter", "Jooble"],
  "employmentType": "Full-time",
  "employmentTypes": ["FULLTIME"],
  "applyLink": "https://www.ziprecruiter.com/c/General-Motors/Job/Staff-Software-Engineer-Developer-Experience/-in-Austin,TX?jid=c6ac4eac3e5aa446&trk=bingjobs",
  "applyIsDirect": false,
  "applyOptions": [
    { "apply_link": "https://www.ziprecruiter.com/c/General-Motors/Job/Staff-Software-Engineer-Developer-Experience/-in-Austin,TX?jid=c6ac4eac3e5aa446&trk=bingjobs", "is_direct": false, "publisher": "ZipRecruiter" },
    { "apply_link": "https://jooble.org/jdp/-8809920332495381921?trk=bingjobs", "is_direct": false, "publisher": "Jooble" }
  ],
  "jobDescription": "Identifies, defines, and formalizes problems such that they can drive design, development, and deployment of algorithmic solutions…",
  "isRemote": false,
  "postedAt": "6 days ago",
  "postedAtBingLabel": "6 days ago",
  "postedAtTimestamp": 1789740720,
  "postedAtUtc": "2026-09-18T14:12:00.000Z",
  "expiresAtTimestamp": 1792281600,
  "expiresAtUtc": "2026-10-18T00:00:00.000Z",
  "location": "Austin, TX",
  "city": "Austin",
  "state": "Texas",
  "country": "US",
  "normalizedTitle": "staff software engineer",
  "bingCompanyId": "1472",
  "bingTitleId": "1586",
  "position": 0,
  "jobUid": "-1577491950.Retro",
  "_sourceQuery": "software engineer",
  "_operation": "search",
  "_fetchedAt": "2026-09-24T15:22:10.000Z",
  "status": "success"
}
```

Empty fields are left out of a row rather than written as null. Job Details rows carry the same fields except position, bingCompanyId and bingTitleId, which exist only in search results.

***

### 💼 Use Cases & Examples

#### 1. Multi-board job feed for a job board

**Job board operators fill a niche site from one source instead of scraping five boards and de-duplicating them.**

**Input:** A job title, a location and Past 24 hours
**Output:** Fresh postings, each listing every board carrying it
**Use:** A daily import that only brings in new roles

#### 2. Recruiting pipeline and talent sourcing

**Recruiters and agencies pull every open role for a title and city on a schedule.**

**Input:** "registered nurse", "London", country gb
**Output:** Postings with full descriptions and exact posting dates
**Use:** Spot new openings the day they appear and brief candidates from the description

#### 3. Hiring-signal lead generation

**Sales teams treat an open role as a buying signal for the tools that role uses.**

**Input:** The job title your product serves, e.g. "salesforce administrator"
**Output:** Employers hiring for it, grouped by bingCompanyId
**Use:** Rank accounts by how many matching roles they have open this week

#### 4. Labor market and hiring trend analytics

**Analysts track posting volume by title, city and employment type over time.**

**Input:** A set of titles run weekly with Past week
**Output:** Postings with exact UTC dates and normalized titles
**Use:** Weekly cohorts that hold up, grouped across title variants

#### 5. Job board coverage audits

**HR-tech teams measure how much of a market each board carries.**

**Input:** One search per role and city
**Output:** jobPublishers on every row
**Use:** See which share of postings LinkedIn, ZipRecruiter or Monster actually carries

#### 6. Contract and remote job alerts

**Freelancers and staffing firms watch for contract and remote roles only.**

**Input:** Employment types CONTRACTOR, Remote jobs only on, Past 24 hours
**Output:** New remote contract postings with apply links
**Use:** A scheduled run that feeds a Slack channel or an email digest

#### 7. Checking whether saved jobs are still open

**Candidates and recruiters re-check a shortlist before acting on it.**

**Input:** Up to 20 job ids per call from an earlier run
**Output:** Only the postings Bing still serves
**Use:** A missing id means the role has closed

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/bing-jobs-scraper').call({
  operation: 'search',
  query: 'software engineer',
  location: 'Austin, TX',
  datePosted: 'week',
  maxResults: 50
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].jobTitle, items[0].jobPublishers);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/bing-jobs-scraper').call(
    run_input={
        'operation': 'search',
        'query': 'registered nurse',
        'location': 'London',
        'country': 'gb',
        'maxResults': 100,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['jobTitle'], item.get('employerName'), item.get('applyLink'))
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~bing-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "search", "query": "data analyst", "location": "Chicago, IL", "datePosted": "today"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: a daily schedule
2. **HTTP Request**: run the actor with your search and Past 24 hours
3. **Process**: keep the rows whose jobPublishers or employmentType you care about
4. **Action**: post new jobs to Slack, a Google Sheet or your ATS

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 jobs** per run, with every field and full descriptions
- No credit card required
- Enough to check the data fits your use case

#### PAID Tier (Production Ready)

- **Up to 500 jobs** per search, the most Bing serves for one query
- Split big pulls by city or title and run them on a schedule
- Pay per result: only jobs actually returned are charged

💰 **$0.003 per job on the Bronze plan**, with lower prices on higher plans. Job Details costs $0.01 per re-checked job, because each id is looked up on its own. A small start fee applies per run.

🔗 [View current pricing](https://apify.com/sian.agency/bing-jobs-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Which job boards does this cover?**
A: Every board Bing's job search indexes. In our test runs: LinkedIn, ZipRecruiter, Monster, CareerBuilder, Glassdoor, Jooble, Jobrapido and Adzuna. Each row names the board it was found on and every board carrying it.

**Q: Does it return salaries?**
A: No. Bing does not publish salary as a field, so there is no salary column. When the employer states pay in the description, it is in jobDescription as written.

**Q: Is the posting date exact?**
A: Yes. postedAtUtc comes from Bing's own record. Where Bing published only a date, the time reads midnight UTC. Bing's own badge, such as "6 days ago" or "June 22", is kept as postedAtBingLabel.

**Q: How many jobs can one search return?**
A: Up to about 500. Bing serves 10 jobs per page and at most 50 pages for one search. For more, split the search by city or by narrower titles.

**Q: Why did a date filter return older jobs?**
A: The date filters are Bing's own, and Bing applies them loosely. In our test runs Past 24 hours also returned 2-day-old postings. Bing's widest window is 7 days, so Past month returns every date. When the window must be strict, filter on postedAtUtc yourself.

**Q: When should I use Job Details instead of Search Jobs?**
A: Only to re-check job ids you already hold. A search row already carries the full description and apply links, and Job Details costs more per job. It returns only postings Bing still serves, so a missing id means the role has closed.

**Q: What output formats are available?**
A: JSON, CSV, Excel, XML and HTML, straight from the Apify dataset, or over the API.

**Q: How is a run billed?**
A: A small start fee, then per job written to the dataset. Jobs removed by your filters, ids that no longer resolve and failed inputs cost nothing.

***

### 🐛 Troubleshooting

**The search returned no jobs**

- Use a job title rather than a single loose keyword: "data analyst" works better than "data"
- Check the country code matches the location, e.g. de for Berlin
- Widen Date posted or drop the distance, employment type and board filters

**Fewer jobs than Max jobs**

- Bing ran out of results for that search, or your board or internship filter removed some
- Split a broad search into several narrower ones

**Job Details returned fewer rows than ids**

- Those postings have closed or been taken down, which is how you detect a filled role
- Take fresh ids from a new Search Jobs run

**Some rows have no description or apply link**

- Include full descriptions was turned off. Turn it back on; it costs nothing extra

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

Bing is a trademark of Microsoft Corporation. This actor is not affiliated with, endorsed by, or sponsored by Microsoft, and it reads only Bing's public job search results. Job board names are trademarks of their respective owners.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue on the [actor's Issues tab](https://apify.com/sian.agency/bing-jobs-scraper/issues)
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

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

# Actor input Schema

## `operation` (type: `string`):

Pick one operation per run. Search Jobs pages Bing's jobs index 10 jobs at a time with the full description included. Job Details re-checks up to 20 job ids you already hold and returns the ones Bing still serves.

## `query` (type: `string`):

Job title, skill or phrase to search for, for example "software engineer" or "registered nurse". Required by Search Jobs. Bing's jobs search reads natural language, so a job title works far better than a single loose keyword, which drifts toward unrelated postings.

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

City, region or country, written the way you would type it into Bing: "Austin, TX", "London", "Berlin, Germany". Leave empty to search the whole country picked below. Writing the place into the keyword instead ("nurse jobs in London") works the same way.

## `country` (type: `string`):

Two-letter country code that picks which national jobs index Bing searches: us, gb, de, fr, ca, au and so on. To search for jobs in Berlin, use de here and Berlin as the location.

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

Freshness window, using Bing's own date filters. Bing applies them loosely: in our test runs Past 24 hours also returned 2-day-old postings, and one internship search ignored Past week. Bing's widest window is 7 days, so Past month returns every date. Filter on postedAtUtc when the window must be strict.

## `employmentTypes` (type: `array`):

Keep only these employment types. Pick any combination, or leave empty for every type. Full-time, part-time and contract are filtered by Bing. Internship has no Bing filter and is matched afterwards on the type Bing states, so an internship search can return fewer jobs than Max jobs.

## `remoteOnly` (type: `boolean`):

Only return work-from-home and remote jobs, using Bing's own remote filter.

## `radiusMiles` (type: `string`):

Only return jobs within this distance of the location. These four are the only distances Bing supports. Leave empty for Bing's default area around the location.

## `excludePublishers` (type: `array`):

Job boards to leave out, one per line, for example LinkedIn or Indeed. Matched case-insensitively against every board carrying a posting, so a job listed on both LinkedIn and ZipRecruiter is dropped when you exclude LinkedIn. Useful when you already collect one board directly. A run using it can return fewer jobs than Max jobs.

## `jobIds` (type: `array`):

Used by Job Details. The jobId values returned by a Search Jobs run, one per line; the raw Bing id in jobUid (for example -1577491950.Retro) works too. Duplicates are removed first. A posting Bing no longer serves is simply missing from the results, which is how you spot a closed role.

## `includeDescriptions` (type: `boolean`):

Fill in the full job description, the apply link of every board carrying the posting, and the employer logo. Turn it off for a roughly 3x faster run that returns only the listing fields: title, employer, location, dates, boards and employment type.

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

Upper bound on jobs returned by Search Jobs. Bing serves 10 per page and at most 50 pages for one search, so 500 is the ceiling. Job Details ignores this and returns one row per job id that is still live.

## Actor input object example

```json
{
  "operation": "search",
  "query": "software engineer",
  "location": "Austin, TX",
  "country": "gb",
  "datePosted": "all",
  "remoteOnly": false,
  "includeDescriptions": true,
  "maxResults": 20
}
```

# Actor output Schema

## `bingJobPostings` (type: `string`):

Every job this run returned, with boards, apply links and posting dates.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "search",
    "query": "software engineer",
    "location": "Austin, TX",
    "country": "us",
    "datePosted": "all",
    "remoteOnly": false,
    "includeDescriptions": true,
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/bing-jobs-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 = {
    "operation": "search",
    "query": "software engineer",
    "location": "Austin, TX",
    "country": "us",
    "datePosted": "all",
    "remoteOnly": False,
    "includeDescriptions": True,
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/bing-jobs-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 '{
  "operation": "search",
  "query": "software engineer",
  "location": "Austin, TX",
  "country": "us",
  "datePosted": "all",
  "remoteOnly": false,
  "includeDescriptions": true,
  "maxResults": 20
}' |
apify call sian.agency/bing-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/bing-jobs-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/LVX0lBUEJFNft0p6e/builds/prbLaIyp9C4OkFE4L/openapi.json
