Connecting Data Sources
Learn how to connect Google Analytics 4, Search Console, Google Ads, Meta Ads, Cloudflare, WordPress, GitHub, HubSpot and other platforms to AI Data Stream.
AI Data Stream connects to your analytics and marketing platforms so the AI can analyze your data in real-time. This guide covers each connection type.
Connection Overview
| Data Source | Free | Pro | Business | Authentication |
|---|---|---|---|---|
| Google Analytics 4 | Yes | Yes | Yes | OAuth or Service Account |
| Google Search Console | Yes | Yes | Yes | OAuth or Service Account |
| PageSpeed Insights | Yes | Yes | Yes | API key (free) |
| Core Web Vitals (CrUX) | Yes | Yes | Yes | None (public) |
| DataForSEO | Yes | Yes | Yes | API login + password |
| Google Ads | - | Yes | Yes | OAuth or Service Account |
| Google Tag Manager | - | Yes | Yes | OAuth or Service Account |
| LinkedIn Ads | - | Yes | Yes | OAuth |
| Meta Ads | - | Yes | Yes | OAuth |
| Cloudflare | - | Yes | Yes | API token |
| WordPress | - | Yes | Yes | Application Password |
| Sitemap | - | Yes | Yes | None (public sitemap URL) |
| HubSpot | - | - | Yes | Service key |
| GitHub | - | Yes | Yes | OAuth / Personal Access Token |
| Pipedrive | - | - | Yes | API Key |
Connections are read-only, with one opt-in exception: an annotation you choose to sync to GA4 is created there as a native GA4 annotation. We never modify anything else.
Most Google connections support two authentication methods: Connect with Google (OAuth, the quickest way) or a service account - the recommended option for agencies and technical users, giving you precise control over which properties are shared and your own API quota. See Connecting Google with a Service Account for the full setup guide. The sections below describe the OAuth flow.
Google Ads connects the same way, with Connect with Google or a service account. See Google Ads below.
Google Analytics 4
GA4 is the most common connection. It provides website traffic, user behavior, conversions, and ecommerce data.
Connecting GA4
- Open your property’s Connections tab and click Add Connection
- Select Google Analytics 4
- Leave Connect with Google selected and click Sign in with Google
- Sign in with your Google account (use the account that has GA4 access)
- Review the permissions and click Allow
- Select the GA4 property to connect (one per AI Data Stream property)
- Click Add Connection to save
What We Access
- Traffic metrics: Sessions, users, pageviews, bounce rate
- Acquisition data: Traffic sources, campaigns, referrals, and GA4’s default channel group per source. With the AI traffic classification beta switched on (Team Settings → Beta Features, team owners only, Pro and Business), Referral and Unassigned rows also get a normalised channel, an AI-assistant flag and a confidence score; see the System One post
- Behavior: Pages per session, avg. session duration
- Conversions: Goals, events, ecommerce transactions
- Demographics: Country, device, browser
Permissions Required
We request:
analytics.readonly- Read-only access to your Analytics dataanalytics.edit- Required by Google to create GA4 annotations
AI Data Stream only writes to GA4 when you choose to sync an annotation there.
Troubleshooting
“No properties found”
- Ensure you’re signing in with the correct Google account
- Check that your account has at least Viewer access to the GA4 property
“Access denied”
- The account owner may need to grant you access in GA4 Admin → Property Access
Google Search Console
Search Console provides organic search data: clicks, impressions, keywords, and page rankings.
Connecting Search Console
- Open your property’s Connections tab and click Add Connection
- Select Google Search Console
- Leave Connect with Google selected and click Sign in with Google
- Authorize access
- Select the Search Console site to connect (one per AI Data Stream property)
- Click Add Connection to save
Property Types
Search Console has two property types:
- Domain properties (e.g.,
example.com) - Includes all subdomains - URL-prefix properties (e.g.,
https://www.example.com/) - Specific URLs only
Both work with AI Data Stream. Choose whichever you have set up.
What We Access
- Search performance: Clicks, impressions, CTR, average position
- Query data: Keywords driving traffic
- Page data: Which pages rank and get clicks
- Device, country and search appearance breakdowns: Mobile, desktop, tablet; country; rich result types
- Discover, Google News, image and video search: Ask for them by name; they are reported separately from web search (Discover and Google News have no query data)
- Filters: Narrow any question to a page prefix or pattern, a country, a device or a search appearance
- Fresh data: Finalised data lags about 3 days; the AI can include the latest provisional days when you ask about “the last few days”
- URL inspection: Index status, last crawl, canonical chosen by Google, which sitemaps and pages link to it, and rich results with any issues (up to 10 URLs at a time)
- Sitemap status: The sitemaps you submitted, when Google last downloaded them, and their error and warning counts
PageSpeed Insights
PageSpeed provides Core Web Vitals and performance scores from Google’s public Lighthouse data.
Getting Your API Key
The PageSpeed Insights API is free, with a limit of 25,000 requests per day. Create a key in the Google Cloud Console and enable the PageSpeed Insights API for that project.
Connecting PageSpeed
- Open your property’s Connections tab and click Add Connection
- Select PageSpeed Insights
- Enter the homepage URL of the site you want to analyze
- Paste your PageSpeed Insights API key
- Optionally set Allowed domains (see below)
- Click Add Connection
What We Access
- Lighthouse scores: Performance, Accessibility, Best Practices, SEO
- Core Web Vitals: LCP, INP, CLS, FCP, TTFB from real Chrome users, for the tested page and for your whole site, each with the share of visits rated good, needs improvement or poor
- Performance metrics: Speed Index, Time to Interactive
- Opportunities and diagnostics: Suggested improvements with estimated savings, plus what is behind a poor metric: the LCP element and its loading phases, elements that shift the layout, render-blocking requests, third-party scripts by blocking time
- Failing audits by category: When you ask for SEO, accessibility or best practices, the failing checks with example elements (missing alt text, uncrawlable links, missing meta description, low contrast)
Restricting Which URLs Can Be Tested
Allowed domains (optional) limits which URLs this connection can speed test. Enter a comma-separated list; each entry also covers its subdomains. Leave it empty to allow any URL, which is what you want for competitor benchmarking. When it is set, a test outside the list is refused before the request is made.
Core Web Vitals (CrUX)
Available on all plans, including Free. Core Web Vitals connects the Chrome UX Report (CrUX) — Google’s public record of how real Chrome users experience websites — as weekly trends covering roughly the last six months.
Because CrUX data is public, you can also track competitor sites: add up to five competitors and their lines appear next to yours in the dashboard widget.
Connecting Core Web Vitals
There’s no account to link and no API key to create:
- Open your property’s Connections tab and click Add Connection
- Select Core Web Vitals (CrUX)
- Confirm your website address
- Optionally add up to five competitor sites — you can also add and remove these later, directly from the dashboard widget
- Click Add Connection
What We Access
- LCP (Largest Contentful Paint): How long until the main content is visible
- INP (Interaction to Next Paint): How quickly the page responds to taps and clicks
- CLS (Cumulative Layout Shift): How much the page shifts around while loading
- TTFB (Time to First Byte): How fast the server starts responding
- FCP and round-trip time: First paint and network latency, available to the AI alongside the four above
- Good / needs improvement / poor split: Not just the 75th percentile, but what share of visits land in each band, per metric
- Single pages: Ask about a specific URL and the AI queries that page’s own data, when the page has enough Chrome traffic to be reported
- Why LCP is slow: The AI can break LCP into time to first byte, resource load delay, load duration and render delay, and tell you whether the largest element is an image
- How people arrive: The share of loads that are fresh navigations, back/forward cache restores, reloads or prerenders
Dashboard values are 75th-percentile field data from real Chrome users, reported weekly per origin (your whole site as one number, not per page). The dashboard widget defaults to phone data — the device class Google Search cares about most — with desktop and all-devices views one click away, and tints each metric’s “good” zone green.
Good to Know
- Small sites may show no data. CrUX only includes origins with enough Chrome traffic. That threshold is Google’s, not ours, and it applies to competitors too.
- Any public site can be queried in chat. The AI’s web-vitals tool accepts any origin, not just your own site and configured competitors.
- CrUX vs. PageSpeed Insights: CrUX shows what real users actually experienced, week by week — ideal for trends, monitoring, and competitor benchmarking. PageSpeed Insights runs an on-demand lab test of a single page — ideal for diagnosing why something is slow. They complement each other.
Cloudflare
Available on Pro and Business plans. If your site sits behind Cloudflare, this connection gives the AI the view from the edge: which AI crawlers are reading the site and what they fetch, whether AI assistants send visitors back, and whole-site traffic totals that count every request — including the ones ad blockers, consent banners and failed tags hide from Google Analytics.
Creating the API Token
- In the Cloudflare dashboard, open the zone’s Overview page and copy the Zone ID from the API panel on the right
- Click your profile icon, then My Profile → API Tokens → Create Token
- Scroll to Custom token and click Get started
- Give the token a name and one permission: Zone → Analytics → Read
- Under Zone Resources choose Include → Specific zone and pick the zone
- Continue to summary and click Create Token — copy it straight away, Cloudflare shows it only once
Connecting Cloudflare
- Open your property’s Connections tab and click Add Connection
- Select Cloudflare
- Paste the API token and the zone ID
- Click Add Connection, then click Test on the new connection — we confirm the token can read the zone’s analytics and report how much history the zone keeps
What We Access
- AI crawler activity: Requests and bandwidth per AI crawler over the period, with a daily trend (GPTBot, ClaudeBot, PerplexityBot, CCBot, Bytespider and others), optionally limited to one bot or to an HTTP status range — so “which crawlers are hitting 404s” is one question. Successful fetches are counted as requests; 4xx/5xx responses are reported separately as failed requests
- AI crawler paths: The pages AI crawlers fetch most, per path and bot
- AI referrals: Human visits that arrived from ChatGPT, Perplexity, Claude, Copilot, Gemini and other assistants, by day or landing page
- Traffic overview: Whole-site requests, page views, unique visitors, bandwidth, cache hit rate, HTTPS share and blocked threats per day, or grouped by host, country, HTTP status, content type or browser — the host view shows whether an API or media subdomain, rather than the public site, is generating the load
The dashboard widget shows daily requests and page views, the AI crawlers seen at the edge, top countries and the split of response codes for the dashboard’s date range. The crawler list counts successful fetches only; failed requests are shown as a separate total underneath.
Good to Know
- Retention depends on your Cloudflare plan. Cloudflare keeps per-request data (behind the crawler tools) for a short window on Free zones and longer on paid ones; daily traffic totals are kept far longer. Every tool checks what your zone actually retains, clamps its date range to it and says so in the response — the AI is told to report the window it actually got.
- AI referrals need a paid Cloudflare plan. Cloudflare only exposes the referrer host on paid zones. On a Free zone the other three tools work in full and the referrals tool explains what is missing.
- Zone totals cover every hostname. Cloudflare analytics roll up the whole zone, so an API subdomain your own site polls, a media bucket or a staging host all count towards requests and bandwidth. The AI is told this and starts from the host breakdown; requests measure edge load, not visitors.
- This is edge data, not Cloudflare Web Analytics. The connection reads the request logs every proxied zone produces. It never reads Cloudflare’s separate Web Analytics beacon, so enabling or disabling that in the Cloudflare dashboard changes nothing here.
- Crawlers are identified by user agent, then checked against Cloudflare’s verified-bot list. Anyone can send a crawler’s user agent string, so every crawler row splits successful fetches into verified requests (Cloudflare confirmed the request came from that bot’s operator) and unverified ones. The AI is told to lead with the verified count when it attributes reads to an AI company, and you can ask for verified requests only. Vulnerability scanners routinely borrow crawler names while probing for
.env, key and config files; those probes return 4xx, so the tools and the widget keep them out of the request counts and report them as failed requests instead. Ask the chat for AI crawler paths with status 400 and above to see what they asked for. - The token is read-only by construction. The Cloudflare analytics API has no write operations, so the connection cannot change DNS, firewall rules or cache settings.
DataForSEO
Available on all plans. Connect DataForSEO to give the AI an external view of your backlink profile — referring domains, anchor text, spam scores, and dofollow/nofollow ratios — from DataForSEO’s web-wide link index. It can also show where AI answers cite you and where your brand is mentioned across the web.
This is a bring-your-own-key integration: requests are billed to your own DataForSEO account, not to your AI Data Stream plan, and you set a row ceiling to keep costs under control.
Getting Your API Credentials
- Create an account at dataforseo.com
- In your DataForSEO dashboard, open the API Access tab
- Copy your API login (usually your email) and the auto-generated API password — note this is separate from your account password
Connecting DataForSEO
- Open your property’s Connections tab and click Add Connection
- Select DataForSEO
- Enter your API login and API password
- Set Max rows per request (default 1000)
- Under Tools the AI can use, tick the groups the AI may call: Backlinks, AI visibility and Brand mentions. Connections added before this option keep Backlinks and AI visibility
- Click Add Connection, then Test on the connection to verify your credentials with a free API call
What We Access
- Backlink summary: Total backlinks, referring domains, spam score, rank, and dofollow/nofollow split for a domain or URL
- Backlinks list: Individual backlinks with source page, anchor text, dofollow status, spam score, and first/last seen dates
- Referring domains: The domains linking to you, ranked by backlink count, each with its own rank and spam score
- Anchors: The anchor text distribution across your backlink profile
- Linked pages: Your tracked domain’s pages ranked by the links they earn, with spam left out
- AI visibility summary: How many Google AI Overview and ChatGPT answers cite a domain, the AI search volume behind those answers, the split by platform, country and language, a month-by-month history, and the domains most often cited alongside it
- AI cited answers: The actual questions and answers that cite a domain or match a topic, including whether ChatGPT cited the domain as a source or only retrieved a page without quoting it
- AI cited pages: Which pages on a domain AI answers cite most — the content that earns citations
- AI visibility comparison: A site and up to nine competitors side by side, with each one’s share of the group
- Top cited domains for a topic: Who AI answers cite when people ask about a topic
- Brand mentions: Pages across the web that mention your brand, a competitor or any phrase: news, blogs and forums by default, with the source, a snippet, the date DataForSEO found the page and how the page treats your brand: favourable, critical or just naming it. The same text republished on many sites is counted once
- Brand mention trends: Mentions per day, week or month, with the sites mentioning you most and how many are favourable, critical or just name you
The AI visibility data covers Google AI Overviews (around 94 countries and their languages) and ChatGPT (United States, English only). Perplexity, Gemini, Claude and Copilot are not included. Data starts August 2025, and the current month is always incomplete. Ask the AI for an “AI search visibility baseline”, or run the AI Search Visibility skill, to get a report you can hold up against any GEO or AEO sales pitch.
Stored Backlinks
Tick Backlinks under Tools the AI can use to show its settings:
- Your domains: Up to 2, one per line. If the property has a Search Console connection, you can fill this in from it with one click
- Competitor domains (optional): Up to 5, one per line
- Refresh backlinks weekly: Off by default. When on, your domains are checked for new and lost links once a week. For a site with about 5,000 links that costs roughly $0.08 a week plus $0.40 for a full refresh each month. Competitors are only refreshed when the AI uses them
Backlinks of these domains are stored once fetched, so asking again, filtering and sorting cost nothing. A stored domain is refreshed when the AI uses it and its links are more than 7 days old, with a full refresh every 30 days. If weekly refresh is off and nobody uses a domain, nothing is spent on it. One lookup makes at most 3 calls: a first fetch of a bigger site takes a few lookups, and until it finishes the AI answers with a live lookup and says so. Sites with more than 20,000 links are stored as a sample of the strongest and newest links, and the AI says so. Anchor lookups for those sites stay live and cost a call each time. Any other domain, or a single page URL, is looked up live each time and not stored.
Stored links stay after they disappear from the web, so the AI can also tell you which links you lost and when, as well as which are new. It can show new and lost links per month too.
Once Backlinks is ticked, a Backlinks entry appears in the property’s sidebar. The page lists the stored links with their status, rank, spam score and date found, your top referring domains and anchors, and filters for domain, status, text, date and dofollow links. Browsing costs nothing. Property admins can press Refresh now to update a domain straight away, which makes up to 10 calls and skips domains refreshed in the last hour. The connection settings show each domain’s stored links, last refresh and spend, with Remove stored data to delete them. Removing a domain from the settings keeps its links until you do that, and deleting the connection deletes them.
Brand Mentions
Tick Brand mentions under Tools the AI can use to show its settings:
- Brand terms: Up to 3 names, one per line. Each is searched as an exact phrase, so use the full name: a partial name can also be a street or a common phrase
- Competitors (optional): Up to 5, so the AI can compare share of voice without being told who to compare against
- Exclude mentions containing (optional): Phrases that mark a mention as noise, such as boilerplate repeated on listing sites
- Exclude domains (optional): Your own sites and any others that should never count as a mention
- Sync brand mentions daily: Off by default. When on, new mentions of the brand terms are fetched once a day, so the AI reads them from storage instead of paying for them in chat. The sync keeps the last 90 days stored. Competitors are only fetched when the AI uses them
Dates are when DataForSEO found a page, not when it was published, so an old article can turn up as a new mention. Small brands can have little data. Run the Brand Mentions Digest skill for a round-up of the latest coverage.
Mentions of your brand terms and competitors are stored once fetched. Asking about the same period again costs nothing, and later questions only pay for pages DataForSEO found since. One lookup fetches at most 3 pages of results: if a long period is not fully stored yet, the AI says the data is partial and the next question carries on. Brands with a very large number of mentions are stored as a sample of the most prominent news, blog and forum stories each week. A phrase that is not one of your brand terms or competitors is looked up live each time and not stored.
Edit the connection to see Stored mentions: the dates stored for each term, the last sync and what it has cost. Remove stored data deletes a term’s mentions. Removing a term from the settings keeps its mentions until you remove them, and deleting the connection deletes them all.
Once Brand mentions is ticked, a Brand mentions entry appears in the property’s sidebar. Until a brand term or competitor is set, the page asks you to add one. After that it lists the stored mentions for a date range, with the term, page types, text, site and About the brand as filters, republished copies grouped under one mention, and the sites that mention you most (click one to see only its mentions). Browsing costs nothing: it reads what is already stored and never calls DataForSEO. Show mentions hidden by noise filters shows what the filters left out and why. Property admins can edit Exclude mentions containing and Exclude domains on the page, or exclude a site with one click, and can press Check for new mentions to fetch what DataForSEO found since the last check for the selected terms. A check costs about $0.03 to $0.06 per call, at most 3 calls per term, and skips terms checked in the last hour. DataForSEO adds pages with a delay of about two days. Stored mentions are also read automatically in the background to see what kind of page each one is and how it treats your brand. Critical and favourable mean the page says something about the company itself, and just named means it only names you, for example as a seller. The Favourable / critical tile counts them, and clicking a count filters the list. Pages recognised as sales listings are hidden by default: turn on Show mentions hidden by noise filters to see them, marked Hidden: sales listing. These labels are automatic, so read the text before acting on one, and a mention stays on a rougher label until it has been read.
Every brand gets its own noise, such as listing and directory pages, press-release networks or partner sites. When the same sites or phrases keep coming up, the AI suggests exclude terms or domains to add. If you agree, it updates Exclude mentions containing and Exclude domains for you. This needs admin access to the property. Changing the filters costs nothing and applies to stored mentions straight away, except for a brand stored as a sample: its sample is fetched again, at the usual cost, the next time the AI looks it up.
Controlling Costs
Queries run against DataForSEO’s API and are billed to your DataForSEO balance. Backlink queries cost about $0.03 per call, or about $0.06 for a full page of 1,000 links, and reading stored links costs nothing; AI visibility queries cost around $0.10 per call plus a fraction of a cent per row, and the AI Search Visibility skill makes five to seven calls. Brand mention queries cost around $0.03 per call, or about $0.06 for a full page of 1,000 results, and stored mentions are never paid for twice. Each brand term and each competitor is a separate call, so the Brand Mentions Digest makes 2 to 9 calls (up to about $0.25) the first time, depending on how many you configure, and repeat runs cost less. There are three guards on the connection:
- Tools the AI can use decides which groups of DataForSEO tools the AI can call at all. Untick a group and its tools disappear from chat, skills and connected AI clients.
- Max rows per request (default 1000) is a hard ceiling on how many rows any single request can pull, regardless of what the AI asks for. Individual tool calls default to a conservative 100 rows. Lower the ceiling to reduce API cost, and raise it only when you need deeper data. It doesn’t limit the pages fetched to store backlinks and brand mentions.
- Allowed domains (optional) restricts which domains can be looked up. Enter a comma-separated list; each entry also covers its subdomains. Leave it empty to allow any domain, which is what you want for competitor analysis. When it is set, a lookup outside the list is refused before any billable call is made.
Google Ads
Available on Pro and Business plans. Connect your Google Ads account to analyze campaign performance.
Connecting Google Ads
Google Ads connects the same way as Google Analytics: leave Connect with Google selected, click Sign in with Google, sign in with a Google account that has access to the ad account, and pick the account from the list. There is no developer token to obtain and nothing to apply for.
Changed in September 2026. Until 9 September 2026 every Google Ads API call needed a developer token that each customer had to apply for through a manager account, and a Google rule pairing Cloud projects to tokens left service accounts as the only way to connect. Google has since retired developer tokens: API access now follows the application making the request, and AI Data Stream’s is approved. Existing connections keep working unchanged, and any token you entered previously is simply no longer read.
- Open your property’s Connections tab and click Add Connection
- Select Google Ads
- Leave Connect with Google selected, click Sign in with Google and sign in with an account that has at least Read only access to the ad account
- Pick your account from the list we fetch
- Click Add Connection to save
Manager accounts are deliberately left out of the list: the Google Ads API can’t run reports against them, only against the ad accounts beneath them. Sub-accounts reached through a manager do appear, as long as the account you signed in with can access them. If no accounts can be listed, a manual customer ID field appears instead (123-456-7890, shown in the top right of the Google Ads interface).
Prefer a service account? Agencies and technical users can connect with a service account instead, exactly as for the other Google services: paste the JSON key and pick the account. One thing to know: with a service account, Google Ads API access follows your Google Cloud project rather than ours, so that project needs Basic access to the Google Ads API (Cloud Console → Google Ads API → Overview). A project that has never used the Google Ads API only has test access and won’t see live campaigns. Connecting with Google avoids this entirely.
What We Access
- Campaign performance: Impressions, clicks, conversions, cost
- Ad group data: Performance by ad group
- Keyword data: Search terms, Quality Score
- Conversion tracking: Goals and values
- Budget and spend: Current spend vs budget
Google Tag Manager
Available on Pro and Business plans. Connect Google Tag Manager to let the AI inspect how your tracking is configured - tags, triggers, variables, and unpublished workspace changes.
Connecting Google Tag Manager
- Open your property’s Connections tab and click Add Connection
- Select Google Tag Manager
- Leave Connect with Google selected and click Sign in with Google
- Sign in with the Google account that has access to your container
- Select the GTM Account, then the GTM Container to connect
- Click Add Connection to save
Access uses Google’s read-only Tag Manager scope. We never modify or publish your container.
What We Access
- Containers: Your GTM accounts and their containers
- Tags: Tag types, firing and blocking triggers, paused state
- Triggers: Trigger types and firing conditions
- Variables: Built-in and user-defined variables
- Entity detail: The full configuration of a single tag, trigger, or variable
- Workspace status: Unpublished changes compared to the live container version
Use Cases
Google Tag Manager pairs naturally with GA4 - one shows how tracking is configured, the other shows what data arrives:
- Container audits: “Are any tags paused, orphaned, or duplicated?”
- Conversion debugging: “The purchase event stopped counting - is the tag configured and firing?”
- Consent checks: “Is Consent Mode wired up on all marketing tags?”
- Workspace drift: “Are there unpublished changes that never went live?”
The GTM Container Audit, GTM Change Monitor, and Conversion Tracking Debugger skills in the catalog build on this connection.
LinkedIn Ads
Available on Pro and Business plans. Connect LinkedIn Ads to analyze your B2B campaign performance — including LinkedIn’s unique professional demographics: which job functions, seniorities, industries, and companies your ads actually reach.
Connecting LinkedIn Ads
- Open your property’s Connections tab and click Add Connection
- Select LinkedIn Ads
- Click Sign in with LinkedIn
- Sign in with the LinkedIn account that has access to your ad account (Viewer role or higher in Campaign Manager)
- Select the ad account to connect
- Click Add Connection to save
Access is read-only. We never create or modify campaigns.
What We Access
- Campaigns: Names, status, objectives, spend, impressions, clicks, conversions, and leads
- Trends: Daily and monthly performance over time
- Audience demographics: Performance by job title, job function, seniority, industry, company, company size, and location
- Ads: Per-creative performance with the parent campaign
Good to Know
- Native lead forms vs website conversions: LinkedIn Lead Gen Form leads happen on LinkedIn itself and never appear in your website analytics. The AI reports them separately from Insight Tag website conversions.
- Demographics are approximate: LinkedIn reports only the top segments and hides very small ones to protect member privacy, so demographic rows won’t add up to campaign totals — they’re directional insight, not accounting.
Use Cases
- B2B audience truth: “Which job functions and seniorities actually click our ads?”
- Spend efficiency: “Which campaigns spent money without producing a single lead last month?”
- Cross-channel comparison: “Compare LinkedIn Ads and Google Ads cost per conversion this quarter”
- Attribution reality check: “Do LinkedIn’s reported conversions match what GA4 saw?”
The LinkedIn Ads Account Audit, LinkedIn B2B Audience Insights, and LinkedIn Lead Attribution Check skills in the catalog build on this connection.
Meta Ads
Available on Pro and Business plans. Connect Meta Ads to analyze your Facebook and Instagram campaign performance — spend, results, audiences, placements, and individual creatives.
Connecting Meta Ads
- Open your property’s Connections tab and click Add Connection
- Select Meta Ads
- Click Sign in with Facebook
- Sign in with the Facebook account that has access to your ad account
- Select the ad account to connect
- Click Add Connection to save
Access is read-only. We never create or modify campaigns. Meta access tokens last about 60 days and are renewed automatically while you keep using the connection — if one does expire, use the Re-connect button to sign in again.
What We Access
- Campaigns: Names, objectives, spend, impressions, clicks, CTR, CPC, CPM, reach, frequency, and conversions
- Trends: Daily, weekly, and monthly performance over time
- Audience breakdowns: Performance by age, gender, country, region, platform (Facebook vs Instagram), placement, and device
- Ads: Per-ad-set and per-creative performance with the parent campaign
Good to Know
- Lead forms vs website leads: Meta’s headline “lead” number blends Instant Form leads (captured on Facebook/Instagram itself) with website pixel leads. The AI reads the underlying breakdown and reports them separately — native form leads never appear in your website analytics.
- Modeled and view-through conversions: Meta’s pixel counts include modeled conversions (iOS privacy opt-outs) and people who merely saw an ad before converting, so they typically exceed what GA4 records. When both are connected, the AI treats GA4 as the verification baseline and explains the gap instead of silently picking a number.
Use Cases
- Platform split: “How does Instagram compare to Facebook for us — and is Audience Network earning its spend?”
- Creative testing: “Which ads are fatiguing, and which campaigns are running on a single creative?”
- Attribution reality check: “How many of the leads Meta claims can GA4 actually verify?”
- Cross-channel comparison: “Compare Meta Ads and Google Ads cost per verified conversion this quarter”
The Meta Ads Account Audit, Meta Tracking Health Check, Meta Lead Attribution Check, and Meta vs Google Ads Channel Mix skills in the catalog build on this connection.
WordPress
Available on Pro and Business plans. Connect WordPress to include content data in your analysis.
Connecting WordPress
Works with any WordPress site running version 5.6 or later (Application Passwords are built-in).
- Open your property’s Connections tab and click Add Connection
- Select WordPress
- Enter your WordPress site URL
- Generate an Application Password in WordPress:
- Go to WordPress Admin → Users → Your Profile
- Scroll to “Application Passwords”
- Enter “AI Data Stream” as the application name
- Click “Add New Application Password”
- Copy the password (you won’t see it again)
- Enter your WordPress username and paste the Application Password
- Click Add Connection
What We Access
- Content: Posts, pages, custom post types
- Categories and tags: Content organization
- Authors: Who published what
- Dates: Published and modified dates
Sitemap
Available on Pro and Business plans. Point the connection at your site’s sitemap.xml and AI Data Stream keeps a record of every URL it lists: when each one first appeared, when it was last seen, and when it dropped out. No credentials, no CMS access, and it works for any site that publishes a sitemap - static builds, Shopify, headless CMSs, anywhere WordPress can’t reach.
The sitemap itself is only a snapshot. The value is the history: knowing which pages appeared and which disappeared, then checking the removed ones against Search Console and GA4 to see how much traffic left with them.
Connecting Sitemap
- Open your property’s Connections tab and click Add Connection
- Select Sitemap
- Enter the Sitemap URL - the public address of your
sitemap.xmlor sitemap index. Gzipped (.xml.gz) and plain-text sitemaps also work. It is usually listed in/robots.txt - Set the Refresh interval (hours): how old the stored copy may be before it is fetched again (12 to 168 hours, default 24)
- Optionally turn on Refresh in the background, so the sitemap is checked once every interval even when nobody asks (see below)
- Click Add Connection, then Test - we confirm the URL is reachable and looks like a sitemap, without downloading it
Saving only checks the URL. The first full fetch happens the first time the AI uses a sitemap tool, when you click Refresh now on the connection, or on the first background check if you turned that on.
What We Access
- Stats: How many URLs the sitemap lists, how many have dropped out over time, additions and removals in the last 7 and 30 days, how many URLs carry a
lastmoddate, and a breakdown by top-level section - Changes: The URLs added, removed or modified in a period. Each removed URL carries the window it disappeared in: still listed at one fetch, gone by the next
- Search: URLs filtered by path pattern, section or
lastmodrange, optionally including removed URLs - which answers “when did this page disappear?” for a single URL or a list of 404s - Refresh: Fetches the latest copy on request, with a five-minute cooldown
Everything is stored in your team’s own database and shows up in the Sitemap Content Changes skill, which lists removed pages and checks each against Search Console traffic. The dashboard widget shows URL counts, recent additions and removals, and the largest sections.
The Sitemap Page
Once a sitemap is connected, a Sitemap entry appears in the property’s sidebar. The page shows everything the AI’s tools can see: the connection state, totals, the largest sections (click one to browse it), a Changes tab listing the URLs added, removed and modified in a date range, and a Search tab for filtering URLs by path, section or lastmod range, with removed URLs and their disappearance windows included on request. Property admins can also press Refresh now there.
Good to Know
- Removal dates are windows, not days. AI Data Stream only knows a page is gone when it next fetches the sitemap, so a removal is reported as “still listed on 9 October, gone by 24 October”. With fetching on use only, that window is however long nobody asked; with Refresh in the background it narrows to your refresh interval. The background check is conditional and only downloads child sitemaps whose
lastmodmoved, so it costs little - Nothing before the first fetch is visible. Every URL present when the connection is first fetched counts as added on that day. Tracking starts when you connect
- Large sitemaps are capped per plan: 10,000 URLs on Pro and 50,000 on Business. Over the cap, the first URLs are kept, the dashboard and tools say the copy is partial, and no URL is ever marked removed from a partial read
- A broken sitemap cannot wipe your history. If a fetch returns far fewer URLs than last time (under half), it is treated as a broken or partial response rather than a mass deletion: nothing is marked removed and the connection shows a warning. Check the sitemap in a browser; if the shrink is genuine, delete and re-add the connection
- lastmod quality is checked. Many sitemaps omit
lastmod, or stamp every URL with the same date or the build time. The connection flags both cases, because the “modified” list depends onlastmodand Google and Bing ignore the field once it proves inaccurate. The fix is for the CMS to emit each page’s real last-modified date - Changing the URL starts over. A different sitemap is a different site, so the stored history is discarded and tracking begins again from the next fetch
GitHub
Available on Pro and Business plans. Connect a GitHub repository to correlate code changes, deployments, and releases with your analytics data.
Authentication Options
GitHub supports two authentication methods:
Option A: OAuth (recommended)
- Open your property’s Connections tab and click Add Connection
- Select GitHub
- Click Connect with GitHub
- Authorize AI Data Stream to access your repositories
- Search for the repository and select it (or click Can’t find your repo? Enter manually); use Add Repository to add more
- Click Add Connection to save
Option B: Personal Access Token
- Go to github.com/settings/tokens
- Click Generate new token (classic)
- Name it “AI Data Stream”
- Select the
reposcope - Click Generate token and copy it
- In AI Data Stream, select GitHub and choose Personal Access Token
- Paste the token, enter the repository owner and name
- Click Add Connection
What We Access
- Repository overview: Language, stars, forks, visibility, license, topics
- Releases: Tag names, publication dates, release notes
- Recent commits: Commit messages, authors, dates (filterable by branch, date range, or author)
- Commit activity: Weekly commit frequency for the last 52 weeks
- Deployments: Production/staging deployments with status and environment
- Issues: Open/closed issues with labels, assignees, timestamps
- Pull requests: Merged/open/closed PRs with branch info, merge dates, and labels
Tool Configuration
The repository overview is always available. The other tools can be toggled per repository: Releases, Commits (which also covers commit activity), Deployments, Issues and Pull Requests.
Use Cases
GitHub is particularly powerful when combined with analytics data:
- Deployment correlation: “Did the traffic drop coincide with a deployment?”
- Release impact: “How did traffic change after the v2.0 release?”
- Bug tracking: “Are there open issues that could explain the conversion decrease?”
- Development velocity: “How does our commit frequency trend compare to traffic growth?”
HubSpot
Available on Business plans. Connect HubSpot CRM to analyze deals, contacts, and pipeline health.
Creating a Service Key
HubSpot replaced private apps with service keys in October 2026 and no longer lets you create new private apps. If you already have a private app access token, it keeps working. For a new connection, create a service key:
- Log in to HubSpot as a super admin (or a user with the Developer tools access permission)
- Go to Settings → Integrations → Service Keys (also under Development → Keys)
- Click Create service key and name it “AI Data Stream”
- Click Add new scope and tick these seven read-only scopes (the Find a scope search helps):
crm.objects.deals.readcrm.objects.contacts.readcrm.objects.companies.readcrm.schemas.deals.readcrm.schemas.contacts.readcrm.schemas.companies.readsales-email-read
- Click Update, then Create
- Copy the key - HubSpot shows it only once
A key can only carry scopes your own HubSpot user already has. If one is missing from the list, ask a HubSpot super admin to create the key.
Connecting HubSpot
- Open your property’s Connections tab and click Add Connection
- Select HubSpot
- Paste your service key (or existing private app access token)
- Click Add Connection
What We Access
- Deals: Pipeline, stages, values, close dates
- Contacts: Lead sources, lifecycle stages
- Companies: Associated deals and contacts
- Activities: Tasks, calls, emails logged
- Pipeline metrics: Win rates, deal velocity
Pipedrive
Available on Business plans. Connect Pipedrive to analyze your sales pipeline and activities.
Connecting Pipedrive
- Open your property’s Connections tab and click Add Connection
- Select Pipedrive
- Enter your Pipedrive API token:
- In Pipedrive: Settings → Personal preferences → API
- Copy your personal API token
- Paste the token into the API Token field
- Enter your Company Domain, the subdomain from your Pipedrive URL (e.g.
mycompanyfrom mycompany.pipedrive.com) - Click Add Connection
What We Access
- Deals: Pipeline stages, values, probabilities, won deals and deals by source
- Activities: Deal activities (calls, meetings, tasks) with their linked person and organization
- Fields: Your deal fields, including custom fields
- Pipeline health: Conversion rates, deal aging
Managing Connections
Viewing Connection Status
Each connection shows an Active/Inactive badge, an Error badge if recent calls failed, and a Token expires in N days badge for connections that need re-authorising.
Refreshing Connections
Data is queried in real-time, but if you need to refresh OAuth tokens:
- Go to your property’s Connections tab
- If a connection shows an Error or Token expires badge, click Re-connect on that connection to sign in again
Removing Connections
- Go to your property’s Connections tab
- Click the trash icon (Delete connection) on the connection
- Click Delete connection to confirm
This doesn’t affect your data in the original platform.
Connection Settings
Each connection has settings that control how it appears in the app:
Show on dashboard
- Toggle whether this connection’s widgets appear on your property dashboard
- Useful for hiding connections you don’t need to monitor daily
Show in AI chat
- Toggle whether this connection is enabled by default in AI Chat
- When disabled, the AI won’t query this data source unless you manually enable it in a conversation
- Helps reduce context and focus on specific data sources
- You can always override these defaults within individual conversations
To change these settings:
- Go to your property’s Connections tab
- Find the connection you want to configure
- Click the dashboard icon (📊) to toggle dashboard visibility
- Click the chat icon (💬) to toggle chat visibility
- Or click the pencil icon (Edit connection) for more options
Troubleshooting
OAuth Errors
“Access token expired”
- Click Re-connect to re-authenticate
“Insufficient permissions”
- Ensure your account has the required access level
- For GA4/GSC: At least Viewer role
- For Google Ads: the signed-in Google account or service account needs Read only or above on the ad account
Connection Timeouts
“Connection timed out”
- Large data sets may take longer
- Try asking for a shorter date range
Data Not Appearing
“No data found”
- Check that the date range has data
- Verify the correct property is connected
Rate Limits
“Rate limit exceeded”
- Too many requests to the platform
- Wait a few minutes and try again
- Consider combining queries