> ## Documentation Index
> Fetch the complete documentation index at: https://docs.markifact.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Research Keywords

> Researches keywords on Bing search: KEYWORD_HISTORY returns each keyword's exact and broad impressions over time, RELATED_KEYWORDS returns related keywords with impressions for a date range

Researches keywords on Bing search: KEYWORD\_HISTORY returns each keyword's exact and broad impressions over time, RELATED\_KEYWORDS returns related keywords with impressions for a date range. Optionally restricted by country and language. Bing keeps roughly 6 months of keyword research data. Search-wide data, not tied to your sites.

| | |
| - | - |
| **App** | Bing Webmaster Tools |
| **Operation ID** | `bing_webmaster_research_keywords` |
| **Type** | Action |
| **Connection** | `bing_webmaster` (required) |
| **Credits per run** | 1 |
| **Agent / MCP tool** | Yes |

## Inputs

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `keywords` | array of string or string | Yes | - | Keywords to research, one per line or comma-separated. Bing keyword research is search-wide, not tied to one of your sites. |
| `mode` | enum (`KEYWORD_HISTORY`, `RELATED_KEYWORDS`) | No | `KEYWORD_HISTORY` | KEYWORD\_HISTORY returns each keyword's impressions over time (exact and broad match). RELATED\_KEYWORDS returns related keywords with their impressions for the selected date range. |
| `date_range` | DateRange | No | - | For RELATED\_KEYWORDS this is the period Bing sums impressions over, and it is required. For KEYWORD\_HISTORY it filters the returned history client-side and can be omitted for the full history Bing keeps (about 6 months). |
| `country` | string | No | - | Restrict to a country using its 2-letter code, for example us or gb. Leave empty for worldwide. |
| `language` | string | No | - | Restrict to a language-locale, for example en-US. Leave empty for all languages. |
| `limit` | integer | No | `1000` | Maximum number of rows to return. Default: 1000. |

### DateRange

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `start` | string | No | - | The start date of the date range to query, format: YYYY-MM-DD or dynamic node reference like \{\{nodeId\_\_data.start\_date}}. Required when preset is 'FIXED' or 'CUSTOM'. |
| `end` | string | No | - | The end date of the date range to query, format: YYYY-MM-DD or dynamic node reference like \{\{nodeId\_\_data.end\_date}}. Required when preset is 'FIXED' or 'CUSTOM'. |
| `preset` | string | No | - | Predefined date ranges or input modes: - Use 'FIXED' or leave empty when you want to specify exact dates (YYYY-MM-DD format) in start/end fields - Use 'CUSTOM' when you want to use dynamic values from other nodes (\{\{nodeId\_\_data.start\_date}} format) in start/end fields - Use other presets (TODAY, YESTERDAY, LAST\_7\_DAYS, etc.) for predefined date ranges (start/end will be ignored) LAST\_N\_MONTHS and LAST\_N\_WEEKS are complete calendar periods ending with last month or last week, so they exclude the current month or week; for a rolling window up to yesterday use LAST\_N\_DAYS (for example LAST\_90\_DAYS) or a FIXED range. When using 'FIXED' or 'CUSTOM', both start and end fields are required. |
| `compare` | CompareOptions | No | - | Optional comparison date range settings. ALWAYS use this field for comparisons; DO NOT create additional requests or nodes, as the backend returns current, comparison, and delta metrics in a single call. |

### CompareOptions

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `start` | string | No | - | The start date of the comparison range, format: YYYY-MM-DD. Optional if preset is provided. |
| `end` | string | No | - | The end date of the comparison range, format: YYYY-MM-DD. Optional if preset is provided. |
| `preset` | string | No | - | Predefined comparison ranges. When provided, start and end will be ignored. |
| `comparison_format` | string | No | `rows` | Comparison output layout: 'rows' returns separate rows for current, comparison, and delta along with date ranges; 'columns' returns a single row with delta values only as additional \*\_pct or \*\_change columns depending on comparison\_value\_type. |
| `comparison_value_type` | string | No | `percentage` | Value type: 'percentage' or 'absolute' |

## Output

**Type**: `List[Dict]`

Returns keyword rows. KEYWORD\_HISTORY rows: Query, Date, Impressions, BroadImpressions. RELATED\_KEYWORDS rows: Query, Impressions, BroadImpressions, SeedKeyword.

**Fields**: dynamic (depend on the inputs)

**Example**:

```json theme={"dark"}
[
  {
    "Query": "running shoes",
    "Date": "2026-08-01",
    "Impressions": 4200,
    "BroadImpressions": 18100
  }
]
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.