🔎 AI Brand Visibility Monitor
Pricing
from $20.00 / 1,000 results
🔎 AI Brand Visibility Monitor
Track your AI brand's organic rankings across Google SERPs and Reddit threads. Extract precise rank deltas, competitor overlap, and social mentions.
AI Brand Visibility Monitor API | Google + Reddit Tracker
Extract structured brand visibility data directly from Google search results and Reddit posts to build a complete picture of your digital footprint. This scraper goes beyond basic keyword tracking by combining traditional SEO metrics with social discussion data, giving you a unified view of where your AI brand stands. By reliably parsing raw HTML from search engine results pages and community threads, the actor extracts accurate ranking details, precise rank deltas, and platform-specific visibility scores without requiring you to build custom web browser navigation scripts.
Search engine marketers and data analysts run this tool to schedule daily competitive intelligence checks. Instead of manually checking target keywords, you can schedule the API to scrape Google and Reddit automatically. The scraped dataset reveals exactly which competitor websites are overtaking your organic positions, outputting a detailed competitor overlap matrix alongside individual post performance.
You can export this data to generate weekly executive email summaries, feed custom business intelligence dashboards, or trigger instant webhook alerts whenever a brand's search position drops or climbs. The JSON export includes exact rank deltas, scraped URLs of ranking pages, snippet details, and aggregated cross-platform signals. Whether you need to monitor a single high-value keyword or run a massive batch of queries, this tool effortlessly captures the data you need to integrate with your favorite SEO tools.
Store Quickstart
- Start with
store-input.example.jsonfor a one-keyword, Google-first, brand-only starter run. - If the output fits, switch to
store-input.templates.jsonand pick one of:Starter: Brand-only Quickstart (1 Keyword, Google)for the fastest first successUpgrade: Competitor Snapshot (1 Keyword, Google)when you want overlap and replacement contextUpgrade: Weekly Executive Email (Google-first recurring)as the default recurring upgrade after the first useful runUpgrade: Webhook Alert (Google-first change alerts)once the same keyword set is monitored by a team or downstream workflowUpgrade: Brand vs Competitors (Google + Reddit)only after the Google-first canary is stable
Key Features
- 📈 Competitive intelligence — Aggregates cross-platform signals (reviews, listings, catalogs)
- 🌐 Multi-source aggregation — Unifies iOS/Android/Shopify/market data in one run
- 📊 Trend detection — Rolling averages, sentiment scoring, and share-of-voice metrics
- 🎯 Targeted queries — Focused brand/product/keyword watchlists
- 📡 Webhook intel push — Deliver insights to marketing/product teams in real-time
Use Cases
| Who | Why |
|---|---|
| Developers | Automate recurring data fetches without building custom scrapers |
| Data teams | Pipe structured output into analytics warehouses |
| Ops teams | Monitor changes via webhook alerts |
| Product managers | Track competitor/market signals without engineering time |
Input
| Field | Type | Default | Description |
|---|---|---|---|
| brand | string | prefilled | Primary brand label used in summaries. Starter runs can be just your brand plus one keyword. |
| brandTerms | array | prefilled | Terms that indicate your brand in titles/URLs, such as domains and product names. Starter mode usually needs just your d |
| competitors | array | prefilled | Optional in starter mode. Leave empty for a brand-only first run, then add 1-3 competitors as the next upgrade for overl |
| keywords | array | prefilled | Keywords or prompts to monitor across search sources. Starter mode should begin with one high-intent keyword before expa |
| searchSources | array | prefilled | Sources to check for each keyword. Starter mode should stay Google-first; add Reddit only after the Google-first run is |
| requestTimeoutSeconds | integer | 30 | HTTP timeout per request. |
| maxResultsPerKeyword | integer | 10 | How many top results to inspect per keyword and source. |
| userAgent | string | — | Optional custom user-agent header. |
Input Example
{"brand": "OpenAI","brandTerms": ["openai.com","openai"],"competitors": [],"keywords": ["ai api pricing"],"searchSources": ["google"],"requestTimeoutSeconds": 30,"maxResultsPerKeyword": 10,"delivery": "dataset","datasetMode": "changes_only","emailTo": ["alerts@example.com"],"notifyOnNoChange": false,"snapshotKey": "ai-visibility-snapshots","dryRun": false}
Output
| Field | Type | Description |
|---|---|---|
meta | object | |
results | array | |
results[].id | string | |
results[].name | string | |
results[].kind | string | |
results[].keyword | string | |
results[].source | string | |
results[].status | string | |
results[].visibilityStatus | string | |
results[].changed | boolean | |
results[].previousBrandRank | null | |
results[].currentBrandRank | null | |
results[].rankChange | number | |
results[].previousCompetitorCount | number | |
results[].currentCompetitorCount | number | |
results[].capturedAt | timestamp | |
results[].previousCapturedAt | string | |
results[].searchUrl | string (url) | |
results[].matchedBrandUrl | string | |
results[].summary | string | |
results[].trend | object | |
results[].actionItems | array | |
results[].topResults | array | |
results[].warning | string | |
results[].error | string | |
results[].priority | string |
Output Example
{"meta": {"generatedAt": "2026-03-29T13:38:02.262Z","now": "2026-03-25T12:00:00.000Z","input": {"brand": "OpenAI","keywordCount": 1,"keywords": ["ai api pricing"],"searchSources": ["google"],"delivery": "dataset","datasetMode": "changes_only","emailToCount": 0,"dryRun": false},"snapshot": {"key": "sample-output-runtime-upgrade","loadedFrom": "local","savedTo": "local"},"warnings": ["target(google-ai-api-pricing): competitors is empty; starter mode will still track brand presence, but add competitors later for overlap context"],"totals": {"targets": 1,"changed": 0,"initial": 1,"unchanged": 0,"errors": 0,"improved": 0,"declined": 0,"stable": 0,"newAppearances": 0,"disappeared": 0},"executiveSummary": {"overallStatus": "watch",
API Usage
Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.
cURL
curl -X POST "https://api.apify.com/v2/acts/taroyamada~ai-visibility-monitor-actor/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{ "brand": "OpenAI", "brandTerms": [ "openai.com", "openai" ], "competitors": [], "keywords": [ "ai api pricing" ], "searchSources": [ "google" ], "requestTimeoutSeconds": 30, "maxResultsPerKeyword": 10, "delivery": "dataset", "datasetMode": "changes_only", "emailTo": [ "alerts@example.com" ], "notifyOnNoChange": false, "snapshotKey": "ai-visibility-snapshots", "dryRun": false }'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("taroyamada/ai-visibility-monitor-actor").call(run_input={"brand": "OpenAI","brandTerms": ["openai.com","openai"],"competitors": [],"keywords": ["ai api pricing"],"searchSources": ["google"],"requestTimeoutSeconds": 30,"maxResultsPerKeyword": 10,"delivery": "dataset","datasetMode": "changes_only","emailTo": ["alerts@example.com"],"notifyOnNoChange": false,"snapshotKey": "ai-visibility-snapshots","dryRun": false})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('taroyamada/ai-visibility-monitor-actor').call({"brand": "OpenAI","brandTerms": ["openai.com","openai"],"competitors": [],"keywords": ["ai api pricing"],"searchSources": ["google"],"requestTimeoutSeconds": 30,"maxResultsPerKeyword": 10,"delivery": "dataset","datasetMode": "changes_only","emailTo": ["alerts@example.com"],"notifyOnNoChange": false,"snapshotKey": "ai-visibility-snapshots","dryRun": false});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Tips & Limitations
- Run weekly for trend tracking; daily for competitive launch monitoring.
- Use webhook delivery to push insights into your BI tools or marketing Slack.
- Archive results in Apify Dataset for your own historical trend analysis.
- Combine with
ai-visibility-monitor-actorfor AI-era brand surface coverage. - Start with a small watchlist, iterate on keyword precision before scaling.
FAQ
What platforms are covered?
Varies by actor — see each actor's input schema for the full source list. Most cover 3–8 major platforms per vertical.
How is data deduplicated across sources?
The actor normalizes entity identifiers (brand name, SKU) before aggregation — cross-source duplicates are merged.
Can I whitelabel the output?
Dataset rows are raw data — build your own presentation layer to whitelabel.
Is the sentiment scoring accurate?
Sentiment uses rule-based + keyword scoring tuned for English. For non-English content, treat scores as directional rather than absolute.
Can I share the dashboard output?
Export from Dataset API into your BI tool (Looker, Metabase, Tableau) for stakeholder-facing dashboards.
Related Actors
Market Intelligence cluster — explore related Apify tools:
- Shopify Store Intelligence API | Catalog + Merch Signals — Analyze public Shopify storefront endpoints for store metadata, collections, product samples, and vendor/tag rollups.
- App Review Intelligence API | App Store + Google Play Summary — Monitor one app across the App Store and Google Play, cluster review themes, flag rating drift, and return recommended actions in a single summary row.
- TED, SAM.gov & Grants Monitor | Bid Alerts & Award Watch — Public-sector tender monitoring for teams that need TED, SAM.
- Clinical Trials Monitor | Condition & Recruitment Watch — Monitor ClinicalTrials.
Cost
Pay Per Event:
actor-start: $0.01 (flat fee per run)dataset-item: $0.003 per output item
Example: 1,000 items = $0.01 + (1,000 × $0.003) = $3.01
No subscription required — you only pay for what you use.
⭐ Was this helpful?
If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.
Bug report or feature request? Open an issue on the Issues tab of this actor.


