# Brand Mention Monitor — Brandwatch Alternative (`khadinakbar/brandwatch-alternative`) Actor

Monitor public brand mentions across Google News, Hacker News, Reddit RSS, and selected feeds. Export matched queries, source URLs, sentiment cues, urgency flags, and collection times for a review queue.

- **URL**: https://apify.com/khadinakbar/brandwatch-alternative.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 public mentions

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Brand Mention Monitor — Brandwatch Alternative

Monitor public brand mentions across Google News, Hacker News, Reddit RSS, and selected feeds. Export matched queries, source URLs, sentiment cues, urgency flags, and collection times for a review queue. For brand researchers, each dataset row is one retained public mention with its query, source, and collection context.

### Workflow: put the results to work

Add the brand name, useful aliases, and explicit competitors, then select relevant public sources. Review urgent mentions with their source context. Sentiment labels are deterministic triage cues; they support a reading queue rather than replace human interpretation.

### Best fit and focused standalone workflow

Choose this Actor when the job is a source-linked snapshot of public conversations around one brand, product, organization, or competitor set. Use it for teams that value machine-readable rows, explicit collection boundaries, and a lightweight way to compare current public coverage.

For a separate AI-answer visibility workflow, then use AI Search Brand Monitor to compare how brands appear in AI-generated answers. Brand Mention Monitor starts with public-source mentions; the next step can be a scheduled review, a team dashboard, or a downstream enrichment flow.

### From monitoring request to reviewable dataset

A growth or communications team starts with a brand name, an optional competitor set, and a seven-day freshness window. The Actor then queries the selected public sources, filters custom feeds to matching terms, normalizes public-source fields, and deduplicates overlapping URLs. Next, the team compares sentiment and urgency flags, exports the `mentions` view, and schedules the same bounded input for regular review.

### Quick start

Use a clear public brand name, select the source mix, and set the whole-run result cap. Aliases widen primary-brand matching, while competitors create separately labeled comparison rows.

```json
{
  "brandName": "Apify",
  "brandAliases": ["Apify Store"],
  "competitors": ["Bright Data"],
  "sources": ["googleNews", "hackerNews", "reddit"],
  "lookbackDays": 7,
  "maxResults": 20,
  "excludeKeywords": ["sponsored"],
  "responseFormat": "concise"
}
```

Add direct public RSS, Atom, or JSON Feed URLs through `feedUrls` when a known publication or community feed belongs in the same review. The Actor keeps the source endpoint and source item URL on every retained record.

### Data you receive

One default-dataset row represents one validated, deduplicated public mention for the configured brand or competitor. `OUTPUT` is the concise terminal outcome, while `RUN_SUMMARY` provides source-level counters and warnings for operational readback.

| Field | Meaning |
| --- | --- |
| `subject` and `brandName` | Identify the primary brand or a configured competitor. |
| `source`, `sourceUrl`, and `sourceDomain` | Preserve the selected public source and a direct item URL. |
| `publishedAt` and `retrievedAt` | Separate the source-supplied publication time from Actor collection time. |
| `sentiment`, `sentimentScore`, and `urgency` | Provide transparent keyword-based review signals. |
| `sourceQuery`, `feedUrl`, and `matchedTerms` | Show why the row entered this bounded monitoring run. |

```json
{
  "recordType": "mention",
  "id": "7ef830cece2f24aa20b91b5f",
  "subject": "brand",
  "brandName": "Apify",
  "matchedTerms": ["Apify"],
  "source": "Hacker News",
  "title": "Example source-provided title mentioning Apify",
  "text": "A bounded source-provided excerpt for review.",
  "sourceUrl": "https://news.ycombinator.com/item?id=123456",
  "sourceDomain": "news.ycombinator.com",
  "author": "example-author",
  "publishedAt": null,
  "retrievedAt": "ISO-8601 collection timestamp",
  "sentiment": "neutral",
  "sentimentScore": 0,
  "urgency": "low",
  "sourceQuery": "Apify",
  "feedUrl": null,
  "responseFormat": "concise",
  "language": "en-US"
}
```

### Run through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~brandwatch-alternative/runs?token=$APIFY_TOKEN" \
  -H "content-type: application/json" \
  -d '{"brandName":"Apify","sources":["googleNews","hackerNews"],"lookbackDays":7,"maxResults":20}'
```

Read the run's default dataset after it completes, then check `OUTPUT` and `RUN_SUMMARY` before treating the result as a complete monitoring snapshot.

### For AI agents and MCP workflows

> Monitor public mentions of Apify and Bright Data from the last seven days, return up to 20 rows, then read the terminal outcome and cite the source URL and collection time for each finding.

An AI agent can pass the same bounded input through Apify, inspect `outcome`, and route rows by `subject`, sentiment, urgency, and provenance. A reliable workflow validates the dataset readback before summarizing coverage and keeps source availability warnings alongside any decision.

### Brandwatch comparison

| Decision area | Brand Mention Monitor | Brandwatch |
| --- | --- | --- |
| Scope | Bounded public-source monitoring workflow for one configured review job. | Broad consumer-intelligence and social-listening suite for enterprise research workflows. |
| Inputs | Brand names, aliases, competitors, public-source selection, and direct public feeds. | Suite workspace, queries, and product configuration for broader research operations. |
| Billing and cost control | Pay per event plus platform usage, with `maxResults` as a per-run collection cap. | Evaluate current suite pricing and plan coverage directly for the required team workflow. |
| Outputs | Source-linked dataset rows plus `OUTPUT` and `RUN_SUMMARY` readback artifacts. | Suite analysis, dashboards, collaboration, and broader research features. |
| Integrations and automation | API-ready input, dataset exports, scheduling, and agent-oriented provenance fields. | Evaluate the current documented integrations and automation path for the selected suite plan. |

This independent Actor is not affiliated, associated, or endorsed by Brandwatch. Brandwatch can be a strong fit for organizations seeking its broader suite capabilities; this Actor is designed for a specific, source-linked monitoring job.

### Builder's note and practical guidance

I built this Actor for the moment between a broad monitoring question and a reviewable, source-linked list of current public mentions. I designed the data contract around provenance first: a source URL, source query, publication time, collection time, and explicit terminal outcome provide a useful starting point for human review or downstream automation. For the clearest signal, use precise public brand names, a modest freshness window, and a result cap that matches the review capacity of the next workflow step. Literal exclusions apply to titles, source text, and selected source queries, which keeps query-led reviews consistent.

### Responsible use

Use this workflow for public sources you are authorized to access, with collection practices that follow applicable laws and site terms. Public-source availability changes over time, so keep the source URL and collection time with any report or decision based on these records.

### Pricing and run costs

This Actor uses **Pay per event plus Apify platform usage**. The [Pricing tab](https://apify.com/khadinakbar/brandwatch-alternative/pricing) lists the current event rates and billing terms.

| Event | Billing unit | When it applies |
|---|---|---|
| `apify-actor-start` | Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
| `mention-observed` | Public mention | One validated, deduplicated public mention is persisted with source provenance and deterministic sentiment fields. |

Run cost combines the charged events and Apify platform usage. Review the run charge limit and requested result count before starting.

### Connect an AI agent

Use the [Apify MCP configurator](https://mcp.apify.com) to choose an available client connection. Inspect this Actor’s current input schema and required credentials before running it.

# Actor input Schema

## `brandName` (type: `string`):

The literal brand, product, organization, or topic to monitor, such as Apify. It is used as the primary query on each selected source. Use a specific public-facing name rather than a social handle or an internal project code. The Actor stores the configured value on every output record.

## `brandAliases` (type: `array`):

Optional literal aliases, products, or former names that belong to the primary brand. They widen matching and are recorded in matchedTerms when present. Use no more than five clear public names to keep results precise. These are not Boolean query operators or regular expressions.

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

Optional competitor names or comparison topics to collect alongside the primary brand. Each value is queried separately and records are labeled brand or competitor. Use up to five precise public names for a useful sampled comparison. This does not calculate market share or total conversation volume.

## `sources` (type: `array`):

Choose one or more public sources: Google News RSS, Hacker News, and Reddit RSS. Each source is queried with the brand and each competitor, then records are deduplicated by URL or normalized text. Source availability can vary and is reported in RUN\_SUMMARY. This selection does not grant access to private, authenticated, or firehose data.

## `feedUrls` (type: `array`):

Optional direct public RSS, Atom, or JSON Feed URLs to scan once in addition to the selected sources. Only public HTTP(S) feed URLs are accepted; localhost, private-network, credentialed, and redirect-to-private targets are rejected. Entries are filtered using the configured brand, aliases, and competitors. This Actor does not discover arbitrary websites or bypass paywalls.

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

Language locale used for Google News RSS requests. It defaults to English (United States) and only affects the Google News request. It does not translate collected content or prove the language of every linked page. Hacker News, Reddit RSS, and custom feeds keep their source-provided text.

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

Country edition used for Google News RSS. It defaults to the United States and scopes only that Google News edition. It does not guarantee a publisher, audience, or article is located in the selected country. Custom feeds and community sources are not geo-filtered.

## `lookbackDays` (type: `integer`):

Use 1 to 30 days to bound source queries and optional-feed date filtering. The default of 7 is useful for a weekly snapshot. Sources that do not expose a reliable date may still return recent endpoint results and are labeled with their supplied timestamp when available. This is a collection window, not a recurring schedule.

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

Whole-run maximum number of normalized mentions to persist, from 1 to 100. The Actor stops at this cap, bounding the primary per-mention event charge. It is not a per-source or per-query maximum. Some source calls may return fewer records than requested.

## `excludeKeywords` (type: `array`):

Optional case-insensitive literal terms that remove a candidate when found in its title, source-provided text, or selected source query. For example, add sponsored to omit sponsored coverage. These are simple contains checks, not Boolean syntax or regular expressions. Leave empty to retain otherwise eligible public mentions.

## `responseFormat` (type: `string`):

Choose concise to retain a short normalized text excerpt, or detailed to retain a longer source-provided excerpt. Both formats include provenance, sentiment, urgency, and matched terms. This setting does not fetch article bodies beyond the selected public source response. It does not alter source coverage or sentiment rules.

## Actor input object example

```json
{
  "brandName": "Apify",
  "brandAliases": [
    "Apify Store"
  ],
  "competitors": [
    "Bright Data"
  ],
  "sources": [
    "googleNews",
    "hackerNews",
    "reddit"
  ],
  "feedUrls": [
    "https://hnrss.org/frontpage"
  ],
  "language": "en-US",
  "country": "US",
  "lookbackDays": 7,
  "maxResults": 20,
  "excludeKeywords": [
    "sponsored"
  ],
  "responseFormat": "concise"
}
```

# Actor output Schema

## `dataset` (type: `string`):

Default dataset with one normalized public mention per record.

## `OUTPUT` (type: `string`):

Terminal outcome, concise counters, charge counts, and warnings.

## `RUN_SUMMARY` (type: `string`):

Detailed terminal counters, source outcomes, and warnings for diagnosis.

# 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 = {
    "brandName": "Apify"
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/brandwatch-alternative").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 = { "brandName": "Apify" }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/brandwatch-alternative").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 '{
  "brandName": "Apify"
}' |
apify call khadinakbar/brandwatch-alternative --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/brandwatch-alternative"
        }
    }
}
```

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/fKvR0gPPeGHpDOcDo/builds/RuWSZzx901bE8oWCf/openapi.json
