MentionBird
add_keyword
Start tracking a keyword. kind is "brand" (default), "competitor" or "topic". platforms optionally restricts it to some platforms (default: every platform). New mentions containing the term will be matched, classified and delivered. For a common word, narrow it with `matching` (requiredTerms with requiredMode any|all, excludedTerms with a `*` wildcard at an end, excludedAuthors, caseSensitive): a post the rules reject is never stored or billed. `context` is one sentence the classifier reads for this keyword only ("Arc is our browser; ignore the geometry word"). `cap` ({ mentions: N }) is a monthly ceiling on its matched mentions: at the cap it stops matching until the first of the next month (UTC) or until the cap is raised, while its daily keyword charge continues. `groupId` puts it in a keyword group (list_groups; default: the workspace's default group); a term may be tracked once per group, so two groups may track the same term as two keywords. `reviewSources` collects reviews: pass each page's link (url: an App Store or Google Play app, a Trustpilot page, a Google Maps place or its maps.app.goo.gl share link) or platform (appstore|googleplay|trustpilot|googlemaps) and id; the app stores also take countries (two-letter codes, default us) and Google Play a language (default en). Every review of the page becomes a mention of this keyword, polled daily, and the last 30 days (newest 100) come in free at once. `platforms: []` makes a reviews-only keyword.
Remote (network-hosted)
Other tools also called add_keyword?
See providers with this name
Input Schema
{
"type": "object",
"properties": {
"cap": {
"anyOf": [
{
"type": "object",
"required": [
"mentions"
],
"properties": {
"mentions": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "Matched mentions allowed per calendar month (UTC). Every match counts, relevant or not, the look-back a new keyword gets included, because every match bills."
}
},
"description": "A monthly ceiling on the mentions this keyword may match. At the cap it stops matching until the first of the next month (UTC), or until the cap is raised or removed. It stays unmuted: it keeps its place and its daily keyword charge; pause it to stop that too.",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "A monthly mention cap; omit or null for none."
},
"kind": {
"enum": [
"brand",
"competitor",
"topic"
],
"type": "string",
"default": "brand",
"description": "brand: your own names. competitor: theirs. topic: the space. Drives share of voice and segments."
},
"term": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "The word or phrase to track, matched case-insensitively as a phrase."
},
"context": {
"anyOf": [
{
"type": "string",
"maxLength": 300,
"description": "A sentence the classifier reads for this keyword only, on top of the company profile or the group's own description (at most 300 characters): what the term means here, what to ignore. \"Arc is our browser; ignore the geometry word.\" Null clears it."
},
{
"type": "null"
}
],
"description": "A sentence the classifier reads for this keyword only, on top of the company profile or the group's own description (at most 300 characters): what the term means here, what to ignore. \"Arc is our browser; ignore the geometry word.\" Null clears it."
},
"groupId": {
"type": "string",
"minLength": 1,
"description": "The group to track it in (grp_...); omit for the workspace's default group. A term may be tracked once per group."
},
"matching": {
"type": "object",
"properties": {
"requiredMode": {
"enum": [
"any",
"all"
],
"type": "string",
"description": "any: at least one required term must appear. all: every one must."
},
"caseSensitive": {
"type": "boolean",
"description": "true: the term must appear in the case it was typed (RAG, never rag). Default false."
},
"excludedTerms": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 50,
"description": "A post containing any of these is dropped. A `*` at the start or the end of an entry is a wildcard (beta.* matches beta.0.1; *bot matches nightlybot)."
},
"requiredTerms": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 50,
"description": "The post must ALSO contain these terms, any one of them or all of them per requiredMode. Empty: no requirement."
},
"excludedAuthors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"maxItems": 100,
"description": "Posts by these authors are dropped: profile or post links, @handles, u/names, Bluesky DIDs or display names, stored in canonical form like an alert's muted list."
}
},
"description": "Omitted fields are untouched; an empty list clears one.",
"additionalProperties": false
},
"platforms": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"bluesky",
"hackernews",
"github",
"stackoverflow",
"devto",
"reddit",
"x",
"youtube",
"news",
"linkedin",
"tiktok",
"instagram"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Platforms to search the term on; omit or null for every platform. [] searches it nowhere: a keyword that only collects reviews, which then needs reviewSources."
},
"reviewSources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The id on the platform: the digits after \"id\" on the App Store, the package name on Google Play, the company's domain on Trustpilot (notion.so), a Place ID (ChIJ...) on Google Maps."
},
"url": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "The review page's link: an App Store or Google Play app (https://apps.apple.com/us/app/notion/id1232780281, https://play.google.com/store/apps/details?id=notion.id), a Trustpilot page (https://www.trustpilot.com/review/notion.so) or a Google Maps place (its full link, or a maps.app.goo.gl share link). Or give platform and id."
},
"language": {
"type": "string",
"maxLength": 10,
"minLength": 2,
"description": "Google Play only: the language of the reviews to read (en, es, de, pt-BR); Google Play answers one language at a time. Default: the link's hl, else en."
},
"platform": {
"enum": [
"appstore",
"googleplay",
"trustpilot",
"googlemaps"
],
"type": "string",
"description": "appstore (Apple App Store), googleplay (Google Play), trustpilot (a company's Trustpilot page) or googlemaps (a place's Google reviews)."
},
"countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
"maxItems": 20,
"minItems": 1,
"description": "App Store and Google Play only: storefronts to read, two-letter codes, at most 20. Default: the one in the link, else us. Each is one more poll a day; the same review seen in two storefronts is one mention. Trustpilot and Google Maps have one page for everyone and take none."
}
},
"description": "A review page whose reviews become this keyword's mentions: its link, or the platform and the id.",
"additionalProperties": false
},
"maxItems": 10,
"description": "Review pages this keyword collects, at most 10: App Store and Google Play apps, Trustpilot pages, Google Maps places. Every new review of one is a mention of the keyword, whatever its text says. Polled once a day (per country on the app stores). A newly connected page brings its last 30 days, the newest 100 reviews (per country), free and never sent as instant alerts; after that each review bills like any mention."
}
}
}