Daily AI search vs organic traffic log in Google Sheets

Every morning at 6am, yesterday's traffic from AI answer engines lands in the same workbook as your Google search clicks, ready to chart.

Deterministic Code
ProfoundGoogle Search ConsoleGoogle SheetsMarketingOperationsData Sync
PromptCreate

Every morning at 6am, log yesterday's AI search traffic right next to my organic search traffic in a single Google Sheets workbook, so I can finally see whether AI answers are sending me visits or quietly replacing them. Use a cron trigger. This is a deterministic data sync: no summarizing, no commentary, no ranking, and no AI generated text anywhere in the output. Just a dependable daily append that a dashboard or a weekly report can sit on top of.

Target day. At the start of the run, compute the previous complete UTC day and use that one date for all three sources, so every tab lines up on the same date. Profound interprets a bare YYYY-MM-DD date as Eastern Time, so do not pass bare dates: pass explicit UTC instants, YYYY-MM-DDT00:00:00Z for the start and YYYY-MM-DDT23:59:59Z for the end of that day. Profound v2 report ranges are inclusive at both ends. The v2 referral and bot reports aggregate hourly in UTC, so scoping to a complete UTC day is exactly what keeps partial-day rows out of the sheet.

Step 1, referral traffic from AI answer engines. Call Profound's Get Referrals Report V2 for the target day to get visits arriving from AI answer engines. These reports use cursor pagination and default to a page size of 10, so send the maximum page size and keep passing info.next_cursor back as cursor until no cursor comes back. Collect every row before writing anything.

Step 2, AI crawler activity. Call Profound's Get Bots Report V2 over the same UTC window to get bot and crawler visits, citations, indexing, and training broken down per bot and bot type. Paginate the same way, collecting all rows.

Step 3, organic search. Call Google Search Console's Search Analytics Query for my verified property with the same target day as both startDate and endDate, requesting the date dimension so the returned row carries the day, and capture clicks, impressions, ctr, and position. Use the siteUrl string exactly as Search Console reports it, since an inexact match silently returns empty data instead of erroring. Search Console lags two to three days and keeps revising its most recent days, so set dataState to "all", read metadata.firstIncompleteDate, and record whether the target day was final or still incomplete in its own column rather than dropping the row. If Search Console returns no rows at all for that day, still append a row of zeros marked incomplete so the tab never develops gaps.

Step 4, write to Google Sheets. One workbook, three tabs, one per source, each with a fixed column layout and the date in the first column. Use these layouts and keep them identical on every run. AI Referrals: date, source, visits, one row per answer engine. AI Crawlers: date, bot, bot type, visits, citations, indexing, training, one row per bot. Organic Search: date, clicks, impressions, ctr, average position, data state, one row for the day. If a metric is missing from a response, write 0 rather than leaving the cell blank or letting the columns shift.

Write safely. On the first run, if a tab does not exist, create it and write its header row. Before appending to a tab, read that tab's date column and skip it if the target date is already present, so a retry or a manual re-run cannot double append. Write with Append Values using USER_ENTERED so the dates and numbers land as real dates and numbers that a chart can read, and INSERT_ROWS so nothing below the table gets overwritten.

Keep it boring on purpose. Do not add a summary step, do not interpret the movement, and do not reorder or editorialize the rows. If one source fails, append the rows that did succeed and let the run surface the failure rather than writing partial or invented values.

Example output

AI Referrals tab date | source | visits 2026-08-08 | ChatGPT | 412 2026-08-08 | Perplexity | 87 2026-08-08 | Google AI Overviews | 156 AI Crawlers tab date | bot | bot type | visits | citations | indexing | training 2026-08-08 | GPTBot | training | 1204 | 0 | 0 | 1204 2026-08-08 | OAI-SearchBot | search | 338 | 41 | 338 | 0 Organic Search tab date | clicks | impressions | ctr | avg position | data state 2026-08-08 | 2940 | 61255 | 0.048 | 12.3 | incomplete

What does this prompt do?

  • Every morning at 6am, logs yesterday's traffic from AI answer engines and your Google search performance into one workbook.
  • Separately tracks AI crawler activity on your site, so you can see which AI systems are reading your pages and how often.
  • Gives each source its own tab with a fixed column layout and the date in the first column, so every tab stacks into a clean trendline.
  • Appends only, with no summaries or commentary, so a dashboard or a weekly report can sit on top of it without surprises.

What do I need to use this?

  • A Profound account on a plan that includes API access
  • A Google account that can see the Search Console property you want to track, already verified
  • A Google Sheets workbook where the daily rows should land
  • The website address you report on, matching the property name Search Console uses

How can I customize it?

  • Move the 6am run to whatever time fits your morning, or switch it to weekly if daily is too granular.
  • Shift the Google search day back by two or three days if you would rather log fully settled numbers, since Google keeps revising its most recent days.
  • Add columns or extra tabs, point it at a different Search Console property, or run one copy per site you own.

FAQs

Will this actually tell me if AI search is replacing my organic traffic?
It gives you both numbers on the same dates in the same workbook, which is the part almost nobody has today. Visits from AI answer engines sit on one tab and your Google search clicks sit on another, both keyed by date, so you can chart them together and see whether one is rising as the other falls. The workflow deliberately does not draw the conclusion for you, it just keeps the record honest.
Why do yesterday's Google search numbers look low?
Google keeps adjusting search performance data for roughly two to three days after the fact, so the most recent day is usually understated. Each row is tagged with whether Google considered that day final or still settling, so you can filter out unsettled rows in your dashboard. If you would rather only ever log finished numbers, you can shift the Google lookback back a few days.
Do I need a paid Profound plan?
Yes. Profound only offers API access on its Enterprise plan, so you will need that in place before this can pull your referral and crawler data.
What happens if it runs twice on the same day?
Nothing breaks. Before writing, it checks whether that date is already logged on each tab and skips it if so, so retries and manual re-runs will not leave you with duplicate rows.
Can I track more than one website?
Yes. Run one copy per site, either pointing each at its own workbook or at its own set of tabs. Each copy stays independent, so one site failing will not affect the others.

Related templates

Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task
Flag VIP client emails in Zoho Mail and alert your team

Keep a spreadsheet of your most important senders, and every email from one gets labeled, posted to your team channel, and logged automatically.

Zoho Mail
Google Sheets
Slack Bot
Deterministic Code
Send Yotpo review requests when Shopify orders ship

The moment an order is fulfilled, we register it with Yotpo so the review request is timed off real delivery, and we log every sync so failures never go unnoticed.

Shopify
Yotpo
Google Sheets
Deterministic Code
Reconcile Shopify sales against Zoho Books every night

Every night at 11pm we compare the day's Shopify orders with your Zoho Books invoices and payments, and flag only what does not match.

Zoho Books
Shopify
Google Sheets
+1
Agentic Task

Stop guessing whether AI answers are costing you traffic.

Get both numbers landing in the same sheet every morning, without anyone remembering to pull them.