# Microsoft Copilot Search Scraper & AI Brand Visibility Tracker (`wulfcare/copilot-search-scraper`) Actor

Ask Microsoft Copilot Search (Bing) your prompts: get the full answer as markdown, every cited source with title and snippet, and a brand report: mentioned or not, rank vs competitors, own site cited. No login or API key.

- **URL**: https://apify.com/wulfcare/copilot-search-scraper.md
- **Developed by:** [Wulfcare Data](https://apify.com/wulfcare) (community)
- **Categories:** SEO tools, AI, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 copilot answers

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Microsoft Copilot Search Scraper & AI Brand Visibility Tracker

Find out what Microsoft Copilot tells people when they ask about your market. Give it the questions your customers ask ("best CRM for a small business", "which VPN is best for streaming?"), your brand and your competitors, and for every answer you get:

- **The full Copilot answer**, as markdown (headings, bold, lists and citation numbers like `[1]`) and as plain text
- **Every source**: number, title, URL, website, site name and the snippet Copilot shows for it
- **A brand report**: is your brand mentioned, **where it ranks** against your competitors (1 = named first), how many times, **the sentence it first appears in**, and **whether Copilot cites your website**
- **A share-of-voice summary of the whole run**: for each brand, the % of answers that mention it, its average rank, how often it's named first and how often its site is cited, plus the 25 websites Copilot cites most

Each prompt is asked in a **fresh, logged-out session of Copilot Search on Bing** (bing.com/copilotsearch), the AI answer Microsoft shows in Bing and Edge. You don't need a Microsoft account or API key.

### Why this Copilot scraper

- **$10 per 1,000 answers, all in.** The most-used Copilot scraper charges $15 per 1,000 and Apify's own $200.
- **Reliable:** 20 of 20 cloud test prompts answered. When Bing refuses the server's IP address, the run switches to Apify's residential proxy by itself.
- **The whole answer, with its citations**: Copilot's `[1]`, `[2]` marks are kept in the markdown and match the `number` of each source, so you can tell which claim came from which page.
- **Brand report and share of voice built in**, at no extra cost.
- **Never pay for a failure:** prompts Copilot didn't answer are free rows with the reason.

### What people use it for

- **AI visibility / GEO / AEO tracking**: how often Copilot recommends you for the questions that matter, and whether that improves after you change your content. Run it weekly on a schedule and chart the share-of-voice summary
- **Competitor share of voice**: who Copilot names first in your category, and who it leaves out
- **Citation research**: the exact pages Copilot reads to answer questions in your niche. Those are the pages to get listed on, reviewed by or quoted in
- **Content gaps**: prompts where competitors are recommended and you aren't, with the sentence Copilot used for them
- **Bulk answers**: Copilot answers with sources for research, datasets or content briefs
- **Client reporting for SEO agencies**: one run per client, with rows that drop straight into a spreadsheet or Looker Studio

### How to use it

1. Add your **prompts**, one per line. Write them the way a customer would ask.
2. Optional: add **your brand** and **competitors** as `Name, other name, website.com`, e.g. `Zoho CRM, Zoho, zoho.com`. A name counts as a mention in the answer, and a website counts both as a mention and as a citation.
3. Optional: **ask each prompt 3-5 times**. Copilot words every answer differently and the brands it names change too, so a few repeats give you a reliable share of voice instead of one snapshot.
4. Run it, then open the **Brand visibility** view, download JSON, CSV or Excel, or call the API. The **Share-of-voice summary** is in the run's Output tab (key-value store record `SUMMARY`).

### What you get

#### One row per answer

```json
{
  "prompt": "how to remove a stripped screw",
  "repeat": 1,
  "answer": "The most reliable way to remove a **stripped screw** is to increase grip—either by cutting a new slot, adding friction, or using a screw‑extractor bit—depending on the tools you have.\n\n### First-line methods (no special tools)\n...\n- **Rubber band trick** — Place a **wide rubber band** between the screwdriver and screw head ... [1]",
  "answerText": "The most reliable way to remove a stripped screw is to increase grip ...",
  "sources": [
    {
      "number": 1,
      "title": "How to Remove a Stripped Screw, 12 Ways - Bob Vila",
      "url": "https://www.bobvila.com/articles/how-to-remove-a-stripped-screw/",
      "domain": "bobvila.com",
      "siteName": "Bob Vila",
      "snippet": "Trying to figure out how to remove a stripped screw? Check out these 12 tried-and-tested methods for guaranteed success.",
      "citedInline": true
    }
  ],
  "sourceCount": 4,
  "citedDomains": ["bobvila.com", "wikihow.com", "thisoldhouse.com", "ifixit.com"],
  "yourBrand": null,
  "yourBrandMentioned": null,
  "yourBrandRank": null,
  "yourBrandCited": null,
  "brandsMentioned": null,
  "brands": null,
  "language": "en",
  "proxy": "residential-US",
  "askedAt": "2026-10-23T20:36:56Z",
  "seconds": 29,
  "error": null
}
```

`rank` counts only the brands you track: 1 is the tracked brand Copilot names first. `proxy` says how the answer was fetched (`none` = the Apify server's own IP address). Every column is present on every row (`null` or empty when there's no value). With brands to track, `brands` holds the same report per brand as in the other Wulfcare AI trackers: `mentioned`, `mentions`, `rank`, `firstMention`, `cited` and `citedUrls`.

#### Share-of-voice summary (record `SUMMARY`)

```json
{
  "answers": 20,
  "unanswered": 0,
  "brands": [
    { "brand": "HubSpot", "isYourBrand": true, "answersMentioning": 15, "mentionRate": 75.0, "averageRank": 1.33, "rankedFirst": 11, "answersCiting": 4, "citationRate": 20.0 }
  ],
  "topCitedDomains": [{ "domain": "zoho.com", "answersCiting": 6, "citationRate": 30.0 }]
}
```

### Pricing

**$3 per 1,000 answers ($0.003 each)**, with no start fee and no monthly rental.

Bing often refuses cloud servers, so most answers need **Apify's residential proxy**. Those answers cost **$0.007 more** ($10 per 1,000 in total), which covers the residential bandwidth. You only pay it for answers that actually went through the proxy (the row's `proxy` field shows it).

**You're never charged for prompts Copilot didn't answer**: they're retried with a fresh session, and if they still fail, you get a free row with `error` saying why. The summary is free.

Set **Max cost per run** in the run options to cap your spend. The run stops cleanly when it gets there, and you keep every answer so far.

### Examples

**Weekly share of voice for your category** (schedule it weekly)

```json
{
  "prompts": ["What is the best CRM for a small business?", "best CRM for real estate agents", "HubSpot alternatives"],
  "yourBrand": "HubSpot, hubspot.com",
  "competitors": ["Salesforce, salesforce.com", "Zoho CRM, Zoho, zoho.com", "Pipedrive, pipedrive.com"],
  "repeats": 5
}
```

**What Copilot tells people in the UK**

```json
{ "prompts": ["best mortgage broker app"], "useResidentialProxy": true, "proxyCountry": "GB" }
```

### Good to know

- **Logged-out Copilot Search.** You see what a new visitor to Bing sees: nothing is personalised by history. The Copilot chat app (copilot.microsoft.com) now needs a Microsoft account, so this Actor uses Copilot Search in Bing, which answers anyone.
- **Answers change.** Copilot is not deterministic: the same prompt can name different brands minutes apart. That's why *Ask each prompt this many times* exists, and why the summary gives rates rather than yes/no.
- **Speed**: an answer takes 30-75 seconds and 3 run at a time by default, so about 3-5 answers a minute.
- **Country**: answers come from the US by default. Turn on *Always use residential proxy* and pick a country to ask from there.
- **Brand matching** is whole-word and case-insensitive: `Asana` doesn't match "asanas". Add other names (`Zoho CRM, Zoho`) to catch every way Copilot writes your brand, and your website to track citations exactly.

### Other Actors by Wulfcare Data

- [Google AI Mode Scraper & AI Brand Visibility Tracker](https://apify.com/wulfcare/google-ai-mode-scraper): the same brand report for Google AI Mode, $2.50/1k
- [ChatGPT Search Scraper & AI Brand Visibility Tracker](https://apify.com/wulfcare/chatgpt-search-scraper): the same brand report for ChatGPT's answers
- [Gemini Search Scraper & AI Brand Visibility Tracker](https://apify.com/wulfcare/gemini-search-scraper): the same brand report for Gemini's answers, $1/1k
- [Google Trends Scraper](https://apify.com/wulfcare/google-trends-scraper): interest over time, rising queries and Trending Now

Found a problem or need a field? Open an issue on the Issues tab.

# Actor input Schema

## `prompts` (type: `array`):

What to ask Copilot, one prompt per line. Write them the way your customers would ask, e.g. "best accounting software for a plumber". Each prompt is asked in a new, logged-out Copilot Search.

## `yourBrand` (type: `string`):

Optional. Your brand name, then any other names and your website, separated by commas: "HubSpot, HubSpot CRM, hubspot.com". Every answer then says whether it mentions you, your rank against the competitors below, and whether it cites your site.

## `competitors` (type: `array`):

Optional. Other brands to track, one per line, in the same format: name, other names, website.

## `repeats` (type: `integer`):

Copilot words its answer differently each time, and the brands it names can change too. Ask the same prompt 3-5 times to get your share of mentions instead of a single snapshot. Every answer is its own row (and its own charge).

## `maxConcurrency` (type: `integer`):

How many questions run in parallel (each is a browser tab). 3 is a safe default.

## `language` (type: `string`):

Interface language code, e.g. en, de, fr, es, ja (default en). Copilot usually answers in the language of the prompt anyway.

## `useResidentialProxy` (type: `boolean`):

Off (recommended): questions go out from the Apify server's own IP address (in the US), and the run switches to Apify residential proxy by itself only if Bing starts asking for captchas. Turn on to ask from a home IP in the country below, e.g. to see what Copilot tells people in that country. Answers through residential proxy cost an extra residential-proxy-answer event (it covers the bandwidth).

## `proxyCountry` (type: `string`):

Where residential-proxy questions come from. Copilot tailors local answers (shops, prices, places) to it.

## Actor input object example

```json
{
  "prompts": [
    "What is the best CRM for a small business?",
    "Which project management tool is best for a remote team?"
  ],
  "yourBrand": "HubSpot, hubspot.com",
  "competitors": [
    "Salesforce, salesforce.com",
    "Zoho CRM, Zoho, zoho.com",
    "Pipedrive, pipedrive.com",
    "monday.com"
  ],
  "repeats": 1,
  "maxConcurrency": 3,
  "language": "en",
  "useResidentialProxy": false,
  "proxyCountry": "US"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "prompts": [
        "What is the best CRM for a small business?",
        "Which project management tool is best for a remote team?"
    ],
    "yourBrand": "HubSpot, hubspot.com",
    "competitors": [
        "Salesforce, salesforce.com",
        "Zoho CRM, Zoho, zoho.com",
        "Pipedrive, pipedrive.com",
        "monday.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("wulfcare/copilot-search-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 = {
    "prompts": [
        "What is the best CRM for a small business?",
        "Which project management tool is best for a remote team?",
    ],
    "yourBrand": "HubSpot, hubspot.com",
    "competitors": [
        "Salesforce, salesforce.com",
        "Zoho CRM, Zoho, zoho.com",
        "Pipedrive, pipedrive.com",
        "monday.com",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("wulfcare/copilot-search-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 '{
  "prompts": [
    "What is the best CRM for a small business?",
    "Which project management tool is best for a remote team?"
  ],
  "yourBrand": "HubSpot, hubspot.com",
  "competitors": [
    "Salesforce, salesforce.com",
    "Zoho CRM, Zoho, zoho.com",
    "Pipedrive, pipedrive.com",
    "monday.com"
  ]
}' |
apify call wulfcare/copilot-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wulfcare/copilot-search-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/dDBspawhFi0Ahzn0q/builds/6dmSWN8Ivhymje8Kc/openapi.json
