Track brand organic ranks on Google SERPs and Reddit for AI-visibility monitoring

AI Brand Visibility Scraper | ChatGPT Search Rank (Store id taroyamada/ai-visibility-monitor-actor) monitors a brand’s organic positions on Google search results and Reddit threads. The live Store description is: track your AI brand’s organic rankings across Google SERPs and Reddit threads; extract precise rank deltas, competitor overlap, and social mentions. It parses SERP and community HTML for ranking details, rank deltas, and visibility scores. It is not a Google News RSS discovery tool and not a review-page scraper.

$20.00 per 1,000 AI visibility result rows

Open AI Brand Visibility Scraper on Apify

Google SERP and Reddit rank tracking, not Google News RSS or review pages

Use this page when the job is brand keyword rank on live Google SERPs and, after a Google-first run is reliable, Reddit threads. Use Google News Scraper when the job is query-based Google News RSS headlines and article URLs. Use G2 & Capterra Review Scraper or Shopify App Store Review Scraper when the source is a public review page. Use Apple Podcasts Reviews Scraper when the source is iTunes Customer Reviews RSS.

This Actor Google News Scraper G2 & Capterra / Shopify reviews
Intent Brand organic rank and competitor overlap for AI-visibility monitoring Discover current article URLs by Google News query Normalize public software or Shopify app reviews
What it reads Google SERP HTML and Reddit thread HTML (searchSources: Google-first, then Reddit) Google News RSS for queries G2/Capterra review-page HTML or apps.shopify.com/{slug} listings
Primary input Required brand and keywords Required queries (max 50) reviewPageUrls or appUrls
Primary output Rank, rank delta, competitor counts, matched brand URL, visibility status Headline, article URL, publisher, timestamps, snippet Ratings, review rows, pros/cons or app-level reports
ChatGPT API? Not in the live schema. Store title is a listing name, not a ChatGPT API No No

This Actor does not accept Google News queries, G2 or Capterra review URLs, Shopify slugs, or podcast IDs. README Key Features also mentions reviews, listings, catalogs, and iOS/Android/Shopify market data; those names are not in the live searchSources description, which only documents Google-first then Reddit.

Use cases

Those bullets are the published README use-case list. The same README also lists a generic “aggregate cross-platform signals (search, app stores, e-commerce storefronts, reviews)” line; live searchSources still documents Google and Reddit only.

How is AI Brand Visibility Scraper different from Google News Scraper and review scrapers?

This Actor tracks brand organic rankings on Google search results pages and Reddit threads for AI-visibility monitoring. The live Store description is: Track your AI brand's organic rankings across Google SERPs and Reddit threads. Extract precise rank deltas, competitor overlap, and social mentions. The live searchSources description is: Sources to check for each keyword. Starter mode should stay Google-first; add Reddit only after the Google-first run is reliable. Google News Scraper queries Google News RSS for headlines, article URLs, publishers, and timestamps (required queries, maximum 50). That is news-article discovery, not SERP rank tracking. G2 & Capterra Review Scraper and Shopify App Store Review Scraper read public review-page HTML. Apple Podcasts Reviews Scraper reads Apple/iTunes Customer Reviews RSS. This Actor does not accept Google News queries, G2 or Capterra review URLs, Shopify slugs, or podcast IDs.

What input is required?

brand and keywords are required. The schema sets additionalProperties to false. Live schema fields:

Field Type Default Notes
brand string required Primary brand label used in summaries. Schema prefill is OpenAI. Starter runs can be just your brand plus one keyword.
brandTerms array Terms that indicate your brand in titles/URLs, such as domains and product names. Schema prefill is openai.com, openai.
competitors array Optional. Leave empty for a brand-only first run, then add 1–3 competitors for overlap context. Each item can be a string or an object with name and terms[]. Schema prefill is empty.
keywords array required Keywords or prompts to monitor across search sources. Schema prefill is ai api pricing. Starter mode should begin with one high-intent keyword.
searchSources array Sources to check for each keyword. Schema prefill is google. Starter mode should stay Google-first; add Reddit only after that run is reliable. No enum is published.
maxResultsPerKeyword integer 10 How many top results to inspect per keyword and source; minimum 5, maximum 20
requestTimeoutSeconds integer 30 HTTP timeout per request; minimum 5, maximum 120
userAgent string Optional custom user-agent header
delivery string dataset dataset, webhook, or email. Starter mode uses dataset.
datasetMode string changes_only changes_only or all. Starter mode should keep changes_only.
webhookUrl string Required when delivery is webhook
emailTo array Required when delivery is email. Schema prefill is alerts@example.com.
notifyOnNoChange boolean false When false, webhook/email mode skips if no event items were produced
snapshotKey string ai-visibility-snapshots Storage key used for rank snapshots
nowIso string Optional fixed timestamp for deterministic tests
dryRun boolean false Skip delivery side effects and snapshot saves

The published input schema does not include queries, surfaces, extractAiOverviewCitations, or chatgpt.

Published README input example (matches the schema):

{
  "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
}

Published Store example run input:

{
  "brand": "OpenAI",
  "brandTerms": [
    "openai.com",
    "openai"
  ],
  "competitors": [
    {
      "name": "Anthropic",
      "terms": [
        "anthropic.com",
        "claude.ai",
        "anthropic"
      ]
    },
    {
      "name": "Perplexity",
      "terms": [
        "perplexity.ai",
        "perplexity"
      ]
    }
  ],
  "keywords": [
    "ai api pricing"
  ],
  "searchSources": [
    "google"
  ],
  "requestTimeoutSeconds": 20,
  "maxResultsPerKeyword": 10,
  "delivery": "dataset",
  "datasetMode": "changes_only",
  "notifyOnNoChange": false,
  "snapshotKey": "ai-visibility-snapshots",
  "dryRun": false
}

Store Quickstart: start with a one-keyword, Google-first, brand-only run. If that output fits, published templates are Competitor Snapshot (1 keyword, Google), Weekly Executive Email (Google-first recurring), Webhook Alert (Google-first change alerts), and Brand vs Competitors (Google + Reddit) only after the Google-first canary is stable.

Run AI Brand Visibility Scraper on Apify

What does a visibility result contain?

The published README output table lists meta, results, and per-row fields: id, name, kind, keyword, source, status, visibilityStatus, changed, previousBrandRank, currentBrandRank, rankChange, previousCompetitorCount, currentCompetitorCount, capturedAt, previousCapturedAt, searchUrl, matchedBrandUrl, summary, trend, actionItems, topResults, warning, error, and priority. The truncated README sample also shows meta.generatedAt, meta.now, meta.input, meta.snapshot, meta.warnings, meta.totals (targets, changed, initial, unchanged, errors, improved, declined, stable, newAppearances, disappeared), and meta.executiveSummary.overallStatus. There is no published output JSON schema on the Store page. The sample is a README illustration, not a live coverage guarantee.

Published README sample (the Store README is truncated after overallStatus; no further keys are published):

{
  "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",

The README cuts off at that comma. Do not treat missing keys as published fields. previousBrandRank and currentBrandRank are listed in the output table with type null.

Does this Actor query ChatGPT or an AI search API?

No. The live Store description names Google SERPs and Reddit threads. The live searchSources field description names Google-first starter mode, then Reddit. The live input schema has no ChatGPT, AI Overview, or search-API field. A README Input Examples block titled ChatGPT search rank focus uses unpublished names queries, surfaces, and extractAiOverviewCitations. additionalProperties is false, so those names are not live schema fields. The Store title includes ChatGPT Search Rank as a listing title; that is not a published ChatGPT API integration.

Use live field names keywords and searchSources (prefill google). Do not send unpublished aliases.

How do dataset, webhook, email, and changes_only delivery work?

delivery defaults to dataset. Enum is dataset, webhook, and email. webhookUrl is required when delivery is webhook. emailTo is required when delivery is email. datasetMode defaults to changes_only; enum is changes_only and all. Starter mode should keep changes_only. notifyOnNoChange defaults to false; when false, webhook/email mode skips if no event items were produced. dryRun true skips delivery side effects and snapshot saves. Store Quickstart starts with a one-keyword, Google-first, brand-only run, then optional upgrades: Competitor Snapshot, Weekly Executive Email, Webhook Alert, and Brand vs Competitors (Google + Reddit) only after the Google-first canary is stable.

README tips: run weekly for trend tracking; daily for competitive launch monitoring. Use webhook delivery to push insights into BI tools or research Slack. Archive results in Apify Dataset for historical trend analysis. Start with a small watchlist and iterate on keyword precision before scaling.

Open AI Brand Visibility Scraper on Apify

How is AI Brand Visibility Scraper priced?

Billing is pay-per-event. The live Store card is $20.00 / 1,000 ai visibility result rows. The billed event is AI visibility result row at $0.02, charged only when a visibility result row is delivered. Unchanged monitoring runs are free. Current PPE lists only that event (no actor-start). You are not charged for Apify platform usage, only the fixed event price. The README Cost section still quotes actor-start $0.01 plus dataset-item $0.003 ($3.01 for 1,000 items); those figures are not the live Store rates.

$20.00 per 1,000 AI visibility result rows ($0.02 per delivered visibility result row; unchanged monitoring runs are free)

See AI Brand Visibility Scraper pricing on Apify

Limits to keep in mind

Open AI Brand Visibility Scraper on Apify

Related pages