Most SMBs check their Google rank weekly. Almost none track their AI-engine citations. That's a gap. Reddit appears in ~40% of AI-generated answers; ChatGPT runs on Bing; Perplexity, Claude, and Gemini each pull from a slightly different web. If a competitor is displacing you in those answers, you won't know from Search Console. This post is the working n8n + Perplexity + Google Sheets workflow we run on our own site weekly — and the dashboard it produces.
~40%
Of AI answers cite Reddit (Princeton GEO research)
23%
Decline in AI citations for posts older than 14 days unrefreshed
~₹1,250/mo
Perplexity Sonar API at 1,200 queries/month
7 nodes
Total n8n nodes in the workflow
## Why this workflow exists
When we audited 15 mid-market Indian B2B sites in February 2026, 13 had no formal tracking of AI-engine citations. They knew Google rank to 2 decimal places. They had no idea whether ChatGPT was suggesting them, a competitor, or nobody when a buyer asked "best CRM for Indian real estate" or "n8n alternatives in India". The same buyer asked the same question every week and got a slightly different answer. That answer is the new top-of-funnel.
This workflow gives you a weekly snapshot of where you appear, where competitors appear, and what changed since last week. It runs on n8n, queries Perplexity's Sonar API (which returns the answer + the cited URLs), and writes to Google Sheets with a Slack alert on regressions.
What this isn't: Not a complete GEO platform. We're not crawling ChatGPT, Claude, or Gemini directly — those don't expose query APIs (browser automation tools like BrowserAct work but cost more and are flakier). Perplexity's Sonar API is the cheapest, most stable proxy for "what does the AI web think about this topic right now". Track Perplexity weekly; sample-check the others manually monthly.
## The workflow at a glance
Q
Query bank in Sheets
A Google Sheet with one row per tracked query — typically 30-100 queries covering your category, your branded queries, and competitor-comparison queries.
⏱
Weekly Cron
Every Monday 6am IST. Reads queries, fires each at Perplexity Sonar, captures answer + citations.
Δ
Diff vs last week
For each query, compares this week's citation list to last week's. Flags new entries, dropped entries, and rank changes.
!
Slack alert on regression
If you dropped from a citation list, or a competitor displaced you, ping #marketing. Weekly summary regardless.
## The 7-node n8n build
1
Cron node — weekly trigger
Mode: Every Week. Day: Monday. Hour: 6. Timezone: Asia/Kolkata. Tip: stagger your team's various automation crons by 15 minutes to avoid hitting third-party rate limits at the same instant on Monday morning.
2
Google Sheets node — read query bank
Operation: Read Rows. Sheet: "Queries". Range: A2:C. Three columns — query (string), category (e.g., "competitor", "category", "branded"), expected_winner (your domain or competitor for comparison queries). Returns ~50 rows for our setup. Loop over each in the next node.
3
HTTP Request node — query Perplexity Sonar
POST https://api.perplexity.ai/chat/completions. Auth: Bearer Token from $env.PERPLEXITY_API_KEY. Body: {"model": "sonar", "messages": [{"role": "user", "content": "{{$json.query}}"}], "return_citations": true}. Response includes choices[0].message.content (the answer text) and citations[] (the URLs Perplexity used). Cost per query at sonar tier: ~$0.005, ~₹0.42. Run with ~1 second delay between requests to stay polite.
4
Code node — parse and tag citations
Pseudocode: const yourDomain = 'softechinfra.com'; const competitors = ['competitor1.com', 'competitor2.com']; const citations = $json.citations.map((url, idx) => ({rank: idx+1, url, domain: new URL(url).hostname.replace('www.',''), is_you: url.includes(yourDomain), is_competitor: competitors.some(c => url.includes(c))})); return {query: $json.query, captured_at: new Date().toISOString(), answer_excerpt: $json.choices[0].message.content.slice(0, 500), citations}.
5
Google Sheets node — append to history
Sheet: "Citation History". One row per query per week. Columns: captured_at, query, you_present (yes/no), your_rank (1-N or null), competitor_present (comma-separated), top_3_domains (comma-separated), full_citations_json. The JSON column lets you reconstruct exact citations later for ad-hoc analysis.
6
Code node — diff against previous week
Read the History sheet. For each query, compare this week's row to last week's row. Detect: (a) you appeared this week but not last (new win), (b) you appeared last week but not this (loss — alert), (c) your rank fell by 2+ positions (regression — alert), (d) a new competitor appeared (intel — log only).
7
Slack node — weekly summary + alerts
Channel: #marketing-geo. Message format: "*Weekly AI citation report — week of {{date}}*\n• {{wins}} new wins\n• {{losses}} losses\n• {{regressions}} rank regressions ⚠️\n\nLink to dashboard: {{sheets_url}}". Optionally a thread with each loss listed: "❌ Query: 'best CRM for Indian SMB' — you dropped, competitor1.com now ranks 1."
## A sample week of output (real, our own site)
We've been running this on softechinfra.com for 14 weeks. Here's what the dashboard looked like in week 14 vs week 13.
| Query |
Week 13 (we ranked) |
Week 14 (we ranked) |
Change |
| "best n8n alternatives in India" |
3 |
2 |
+1 (win) |
| "WhatsApp BSP comparison India" |
5 |
not cited |
dropped (regression — alert fired) |
| "GST e-invoicing software for SMB" |
not cited |
4 |
new entry (win) |
| "Razorpay vs Cashfree pricing" |
2 |
2 |
no change |
| "chatbot development cost India" |
not cited |
not cited |
still missing — backlog item |
The "WhatsApp BSP comparison India" drop in week 14 traced back to a competitor publishing a fresher comparison post. We refreshed our own post 36 hours later — by week 16, we were back at rank 3.
## What the queries should look like
Three buckets in the Sheet, ~30-100 rows total:
-
Category queries (40-60%): "best [thing] in India", "how to [do thing]", "[your category] software for SMB". The buyer-intent core.
-
Comparison queries (20-30%): "[competitor1] vs [competitor2]", "alternatives to [competitor]", "[your category] pricing comparison". Highest-intent buyers; where citation actually wins business.
-
Branded queries (15-25%): "what is Softechinfra", "Softechinfra reviews", "is Softechinfra legit". Brand-defence territory; if you're not in your own brand citations, that's a crisis.
Avoid wide vague queries ("best software") — they're noisy and rotate too much week to week. Be specific.
## When NOT to bother running this
Three patterns where this isn't worth the build:
-
You don't yet rank for anything. If you're a 6-month-old site with 5 blog posts, you have nothing to track. Spend that time writing posts; come back in 6 months.
-
You already use Profound, Otterly, or AthenaHQ. Commercial GEO trackers do this and more out of the box. Pricing starts at ~$99/mo. If you can afford it, the data quality and competitor coverage justify the spend.
-
Your category isn't in AI search yet. Hyper-local services (a Pune chartered accountant) get vanishing AI traffic — Perplexity rarely answers "best CA in Aundh". Stick to Google Local + GMB.
## Real example — a Mumbai SaaS startup, B2B SMB tooling
Client: a 12-person Mumbai SaaS team selling expense-management to mid-market Indian companies. They were #2-3 on Google for "expense management software India" for 18 months. AI traffic was a black box.
We deployed this workflow in February 2026. First week's report showed they were cited in 4 of 23 tracked queries, vs the leading competitor's 17. The gap was almost entirely on "comparison" queries — the competitor had a series of "X vs Y" posts that Perplexity and ChatGPT pulled from.
The team published 8 comparison posts over 6 weeks (one per week) following the GEO playbook — definition-first paragraphs, comparison tables, FAQ schema. By week 12, they were cited in 14 of 23 queries. Demo requests attributed to "AI engines" in their CRM (asked at signup) went from ~2/month to ~11/month.
The Reddit thread on [r/SEO](https://www.reddit.com/r/SEO/) about Perplexity API tracking has multiple Indian operators sharing similar setups. A few use BrowserAct to also crawl ChatGPT for the same queries — more data, more cost (~3x), more failure modes.
## Cost breakdown (real, May 2026)
For a tracking volume of 50 queries × 4 weeks = 200 queries/month:
- Perplexity Sonar API: 200 × ~$0.005 = $1, ~₹85/month at base sonar tier.
- For sonar-pro (better citations): 200 × ~$0.015 = $3, ~₹250/month.
- n8n (self-hosted on Hetzner CX22): ~₹740/month + Postgres add-on ₹1,100/month.
- Google Sheets / Slack: free tier covers everything.
Total monthly cost: ₹1,925 to ₹2,090. Cheaper than a single hour of an SEO consultant's time per month, and far more actionable than waiting for Search Console to show AI traffic (it doesn't, in any useful detail).
For larger query banks (200-500 queries weekly, multi-language), the Perplexity bill scales linearly. Above 500 queries/week, consider sonar-pro on a sample subset weekly + sonar on the full set monthly.
## Setup checklist (45 min, end-to-end)
- Perplexity Sonar API key created and stored as $env.PERPLEXITY_API_KEY in n8n
- Google Sheet "Queries" populated with 30-100 rows: query, category, expected_winner
- Google Sheet "Citation History" created with column headers (captured_at, query, you_present, your_rank, competitor_present, top_3_domains, full_citations_json)
- n8n Cron node scheduled for Monday 6am IST
- Slack incoming webhook URL configured in the Slack node
- Code node tested with a sample Perplexity response — citations parsed correctly
- Diff logic verified by manually adding two weeks of fake history rows and triggering Cron
- First Slack alert received (even if just the summary, no regressions)
## What to do with the data once it's flowing
Tracking is the easy part. Acting on it is where most teams stall. After 4-6 weeks of data, three actions typically pay off:
-
Refresh top-cited posts every 6-8 weeks. Princeton's GEO research shows posts older than 14 days without updates have ~23% lower citation rates. Don't rewrite — add a "Updated [date]" line, refresh one stat, add one new FAQ. Republishing forces re-crawl.
-
Build a comparison post for every "X vs Y" query you don't yet rank for. Comparison queries have buyer intent. They're also where AI engines lift tables verbatim. Each new comparison post adds ~1-3 new tracked-query wins over 2-3 weeks.
-
Steal competitors' citations. When a competitor appears in a citation list and you don't, look at their cited URL. What format is it (listicle, comparison, FAQ-heavy)? Mirror the format on your own page targeting the same query. Recovery time: 2-4 weeks typically.
## A note on what Perplexity returns vs ChatGPT
We've spot-checked ~60 queries side-by-side over 12 weeks. Patterns:
- Perplexity tends to cite 5-8 URLs per answer. ChatGPT in browse mode cites 3-5.
- Perplexity over-indexes on recent content (last 30 days). ChatGPT relies more on Bing's ranking, which lags Perplexity by ~2-4 weeks.
- Both engines disproportionately cite Reddit — but for different topics. Reddit dominates on consumer products and software comparisons; less so on B2B services.
- Both engines cite Wikipedia for definitions. If your category has a Wikipedia stub that's outdated, that's a free win waiting to happen — edit it (responsibly).
The takeaway: Perplexity tracking is a leading indicator. If your wins on Perplexity grow over 4 weeks, ChatGPT typically catches up over the next 4-8.
## Building the Slack alert format that people actually read
Most teams' GEO Slack alerts get muted within 2 weeks because the format is noisy. A pattern that survives:
- One thread parent message per week with the summary numbers (wins, losses, regressions). Plain text, no formatting tricks.
- One thread reply per regression with: the query, who you lost to, the URL of the new winner. That's it.
- A separate channel for "wins worth celebrating" so the marketing team gets some dopamine for the work — important when content investments don't show ROI for 8-12 weeks.
We send the summary as a regular message in the channel, the regressions as threaded replies. People scan the parent; the team that owns the page reads the thread.
## A note on our founder's workflow
A version of this workflow runs on [Vivek Singh's blog](https://viveksinra.com) tracking ~80 founder-perspective queries weekly. The dashboard surfaces a weekly "what AI engines are now saying about Indian SaaS" digest, which feeds the editorial calendar. If you want a peek at the spreadsheet template (sanitised), email contact@softechinfra.com.
## FAQ
### Why Perplexity and not ChatGPT or Claude?
Perplexity exposes a public API (Sonar) with citations returned in the response. ChatGPT, Claude, and Gemini do not — to track those, you need browser automation (BrowserAct, Browse AI), which is slower, costlier, and breakable. Perplexity is the most reliable proxy for "what is the AI web saying right now".
### How accurate is Perplexity as a proxy for ChatGPT?
Imperfect but usable. Perplexity's index is broader than Bing (which feeds ChatGPT) but most overlap in the top citations. In our spot-checks, ~70% of Perplexity's top-5 citations also appear in ChatGPT's answer for the same query. For trend tracking, that's plenty.
### Can I do this without n8n?
Yes — a Python script + Google Sheets API + Slack webhook works. We use n8n because the visual workflow is easier to hand off to a marketing operator who can maintain queries without touching code. For dev-only teams, a 60-line Python script in cron is simpler.
### How long until the data is useful?
After 4 weeks of data, you can spot trends. After 12 weeks, you can attribute content investments to citation lift with reasonable confidence. Don't act on week-1 data — Perplexity's results have meaningful week-to-week variance.
### What's the difference between sonar and sonar-pro?
Sonar is the base model — fast, cheap (~$0.005/query), good for tracking. Sonar-pro uses a larger model with deeper citation tracking and is closer to what a Perplexity Pro user gets in the UI. For weekly tracking, sonar is fine. For one-off "give me the full answer with reasoning" investigation, sonar-pro is worth the 3x cost.
### Do I need API keys for Slack and Sheets?
For Slack: an Incoming Webhook URL (free, no API needed) is enough for write-only alerts. For Google Sheets, n8n's OAuth integration handles auth — sign in once, n8n stores the token. No service account needed for personal sheets.
### How do I avoid hitting Perplexity's rate limits?
The default Sonar API rate limit is generous (200 queries/minute). At 50 queries/week, you're nowhere near it. If you scale to 1,000+ queries weekly, batch them across the day (10 queries every 30 minutes) instead of firing all at once on Monday morning.
Want This Citation-Tracking Dashboard Built?
We ship the n8n + Perplexity + Sheets + Slack workflow end-to-end in 4 working days — query bank curation, workflow setup, dashboard formulas, Slack channel setup, and a 30-day check-in. Typical scope: ₹38,000 fixed fee + ~₹2,000/mo running cost. Suitable for SaaS, agencies, B2B brands with active content programs and ₹50 lakh+ annual revenue.
Request a GEO Audit
If you'd like the n8n workflow JSON and the Sheets template (both sanitised), email contact@softechinfra.com — we'll send them over before the call.