Every service Visibility connects to — Google Analytics, Search Console, WordPress, your own DataForSEO keys, your own AI clients, agent email accounts and sign-in providers — and where each one is set up.
Visibility connects to the services your SEO work already runs on. Each connection lives at the level it belongs to: a data source for one website is set up on that Project, an account your whole Company shares is set up in Company settings, a mailbox belongs to one Agent, and a sign-in provider belongs to you.
Connection
Where you set it up
Who can do it
Google Analytics and Google Search Console
Project → Settings → Integrations
Manage integrations (Admin and Manager by default)
WordPress
Project → Settings → Integrations
Manage integrations
DataForSEO with your own keys
Company settings → AI clients → Data providers
Company admins
Your own AI clients
Company settings → AI clients
Company admins
Agent email accounts
An agent’s Mail tab
Manage agents
Sign-in providers (Google, X)
Your Account dialog
You
Company settings opens only for people with the Manage company permission, so the company-level connections below are an admin job. See Team management for the permission matrix.
Each project connects to Google Analytics and to Google Search Console separately. The Integrations tab has a tile for each, with its own Connect button and its own Google consent screen asking for a single read-only permission. You can connect either one on its own.
Settings → Integrations: a tile per data source, each with a status badge and its own buttons.
Source
What it brings
Google Search Console
Clicks, impressions, CTR and average position, top queries and pages, devices, a country map — and the content opportunities on the project’s Opportunities page.
Google Analytics (GA4)
Organic sessions, users, new users, engagement rate, bounce rate and average time on site.
1
Open the project's Integrations tab
Open the project from the sidebar, click Settings, then Integrations.
2
Click Connect on the tile you want
You are sent to Google. Sign in with the account that can see the property or site and click Allow.
3
Pick the property or the site
You come back with the badge Choose property (Analytics) or Choose site (Search Console). Click it and pick from the list: GA4 properties are grouped by Analytics account, and Search Console lists only verified sites with your permission level on each. A toast confirms Property selected or Site selected.
4
Read the report
The tile turns to Connected with the property or site name. Open Reports → Organic Traffic to see the data. See Organic traffic.
Later, use Change property or Change site to repoint a connection, and Disconnect to remove it.
Only the teammate whose Google account made the connection can change the property or site — Google only lists what their account can see. Other people see a disabled button and the reason: “Only [email protected] can set this property. Disconnect and reconnect with your own Google account to manage it yourself.” Anyone with Manage integrations may disconnect.
A red Reconnect badge, or an inline message such as “Google Analytics read access was never granted. Reconnect and choose Allow on Google’s screen.”, means data has stopped arriving. Click Reconnect and approve on Google. If a connection is switched off after repeated errors, the tile reads “Disconnected automatically — Google Analytics data has stopped updating.” and the people who can fix it get a notification in the Inbox.Disconnecting removes your Google connection for that product across the whole Company and clears this project’s selection. Other projects that relied on it fall back to another teammate’s connection if one exists.
If Analytics and Search Console end up pointing at two different websites, the Organic Traffic report shows Analytics and Search Console are connected to different websites and stays hidden until you fix it, so numbers from two sites are never mixed. Use Change property or Change site, then refresh the report.
Pair a project with your WordPress site through the official Agentic SEO for Visibility plugin. No WordPress password or application password is involved — the plugin and Visibility pair with a short code.
The WordPress card on the project's Integrations tab.
1
Install the plugin
In WordPress, install and activate Agentic SEO for Visibility from wordpress.org. It needs WordPress 6.0 or newer and PHP 7.4 or newer.
2
Generate a pairing code
In Visibility, open the project → Settings → Integrations and click Connect on the WordPress card, then Generate pairing code. The code looks like VIS-A7K9-XB. It works once and expires after 10 minutes — click Generate another if it lapses.
3
Paste it into the plugin
In WordPress admin go to Agentic SEO → Connection, paste the code into Pairing code and click Connect.
4
Check the card
Back in Visibility the card reads Connected with the site name and the line “Publish requests are approved in Inbox → Approvals.”
A project pairs with one site at a time; pairing again replaces the previous connection. Disconnect on the card (or Disconnect on the plugin’s Connection screen) unpairs the site — posts already on the site and your work in Visibility are untouched, and you can re-pair with a new code whenever you like.Once a site is paired, a content task’s editor gains Post to WordPress, which creates a draft on the site. Publishing is never automatic: every publish, immediate or scheduled, raises a WordPress publish Approval that a person decides in the Inbox. See Content and WordPress for drafting, SEO fields, images and scheduling.
SEO data sources are listed company-wide under Company settings → AI clients → Data providers, not per project. Each row runs either on Visibility Data — the platform’s own account, included and metered to Credits — or on your keys, which run on your own account and are not metered.
Company settings holds the company-wide connections: AI clients and Data providers.
1
Open Data providers
Go to Company settings → AI clients and scroll to the Data providers card.
2
Add your credentials
On the DataForSEO row click Connect Your Keys, enter your DataForSEO API login and password, and click Save keys.
3
Confirm the switch
Read “Stop using Visibility Data? … DataForSEO calls will run on your account (and won’t spend credits). You can switch back anytime.” and click Use my own keys.
4
Check the badge
Visibility tests the key straight away. The badge becomes Your keys · connected, or · connection error with the reason. Use Test any time, Replace keys to enter new ones, or Use Visibility Data to move back to the included lane.
Connecting your own key moves keyword metrics (volume, difficulty, CPC), competitor keyword data, backlink data and on-page crawls onto your DataForSEO account, where nothing is metered to Credits. Rank checks are the exception: they always run on Visibility Data and still cost Credits per keyword per check. See Credits and BYOK.
If your DataForSEO account restricts access by IP address, calls will fail until Visibility’s address is allowed in your DataForSEO dashboard. Contact support for the address to allow.
Every agent runs on an AI client plus a model. Visibility AI is the managed option: there is nothing to connect, and its usage is metered to your Credits. You can also connect your own accounts under Company settings → AI clients, and any agent set to that client is then billed by your provider rather than in Credits.
Client
How you connect it
Claude Code
A sign-in dialog: open the link, sign in, and enter or paste the code the provider shows.
Codex
The same sign-in dialog.
Gemini CLI
The same sign-in dialog.
API Client
Add provider → pick a provider from the dropdown → paste your API key → Connect. You can add several providers.
1
Start the connection
On the client’s row click Connect. A Connect dialog opens for that client with a countdown, Finish within m:ss.
2
Sign in with the provider
Use Copy or Open on step 1 to open the provider’s sign-in page in a new tab. If the dialog shows a code, enter it on that page; if it asks you to paste the code the provider gives you back, paste it and click Connect. Otherwise just wait — “Waiting for you to authorise on the page…” finishes on its own.
3
Confirm
A toast confirms that the client is connected, and the row turns green with the connected account on it.
Only the X or Close control dismisses that dialog — clicking outside or pressing Escape is ignored so a sign-in in progress is not lost. If the countdown runs out you see “Sign-in window expired — close and reconnect.”On a connected row, Test re-checks the connection, Models chooses which models agents may pick, and Disconnect removes it. An API key you paste is validated with a live test; an invalid one shows “Could not validate the API key”. Each agent then picks one client and one enabled model on its Config tab — see Agents and Company settings.
Outreach agents send from a real mailbox you give them. Open the agent, then its Mail tab: “Email accounts this agent can send from.”
Gmail
Any SMTP server
Fill in Label, Gmail address, an optional From name and a 16-character App password, then click Add Gmail account. Sending and reply detection are configured for you.Google refuses your normal password. Expand How do I get an app password? for the steps, or create one at myaccount.google.com → Security → 2-Step Verification → App passwords. 2-Step Verification must be on for the account.
Fill in Label, From address, From name, SMTP host, Port, Username and Password, and turn on Implicit TLS (port 465) if your server needs it.The Inbound (IMAP) block below is optional — add the host, port, username and password there so replies stop outreach follow-ups.
Each account card offers Edit, Test, an enable switch and a delete button. Test reports each leg separately, for example “Test email sent to … · IMAP OK”. Credentials are stored encrypted and never shown again; leaving a password field blank when editing keeps the stored one.
Without inbound (IMAP) details the card reads “No IMAP — replies won’t be detected” and follow-up sequences run to the end of their plan. With them, a reply stops the sequence and wakes the agent to answer. An account whose sign-in is refused disables itself, stops its sequences and raises a notification — fix the credentials and switch it back on.
The SEO Outreach Agent preset must be given an email account when you hire it. Every message it sends is listed under Sent on the same tab. Only members with Manage agents can add, edit, test, enable or remove these accounts; everyone else sees the tab read-only. See Link building for how outreach uses them.
Your own account can sign in with Email and password, Google and X. Open the Account dialog from your name at the bottom of the sidebar and read the Sign-in methods card: each tile shows Connected (with the date it was linked, for Google and X) or Not connected.The card is informational — there are no Connect or Disconnect buttons. To add Google or X, sign out and sign back in with Continue with Google or Continue with X using the same confirmed email address, and the provider is linked automatically. To add email and password to a Google- or X-only account, use Set a password in the same dialog. See Your account.
You need the Manage integrations permission for the project connections, which the Admin and Manager roles have by default. Hover the button for the reason. Company-level connections need Manage company.
The Google picker is empty
Search Console lists only verified sites (“No verified sites on this Google account.”) and Analytics only GA4 properties (“No GA4 properties on this Google account.”). Sign in with a different Google account, or ask the site owner to grant your account access in Google first.
The pairing code expired
Codes work once and last 10 minutes. Click Generate another in the Connect WordPress dialog and paste the new one.
An agent cannot post to WordPress
Check that the task’s project has a paired site, and that the agent’s Access tab grants WordPress. Even then, every publish waits for an Approval in the Inbox.
DataForSEO calls fail after you add your keys
Click Test on the row to see the error. If your DataForSEO account restricts access by IP, contact support for the address to allow, then test again.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Visibility Docs","colors":{"primary":"#171717","light":"#e5e5e5","dark":"#0a0a0a"},"logo":{"light":"https://mintcdn.com/doableteam-a944c448/yZxfxMRqwidNc6fj/logo/light.png?fit=max\u0026auto=format\u0026n=yZxfxMRqwidNc6fj\u0026q=85\u0026s=e1fd35ed3273f515f71eeea2dadf78bc","dark":"https://mintcdn.com/doableteam-a944c448/rtDno5BzOkv5Z5j1/logo/dark.png?fit=max\u0026auto=format\u0026n=rtDno5BzOkv5Z5j1\u0026q=85\u0026s=b596ae0dadfdf638afa6e7647926f980"},"favicon":"https://mintcdn.com/doableteam-a944c448/zTMBed2Ps_Y8Loxi/favicon2.png?fit=max\u0026auto=format\u0026n=zTMBed2Ps_Y8Loxi\u0026q=85\u0026s=ee604d5930191a7b8e1e524f7bfa06a5","footer":{"socials":{},"links":[{"header":"Product","items":[{"label":"Open Visibility","href":"https://app.visibility.so"},{"label":"Status","href":"https://status.visibility.so"}]}]},"icons":{"library":"fontawesome"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"doableteam-a944c448","hasAudioNarration":false,"actualSubdomain":"doableteam-a944c448","customDomains":["docs.visibility.so"],"gitSource":{"type":"github","owner":"muhammedilyasy","repo":"visibility-docs","deployBranch":"main","isPrivate":true,"contentDirectory":"","mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aa1001aa24ff9286dbd94f6","collectionId":"c6362ac3-9167-4500-94f6-a10bb4528c5f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aa1001aa24ff9286dbd94f6"},"entitlements":{},"buildId":"6aa1001aa24ff9286dbd94f6","clientVersion":"0.0.3908","searchFilterCounts":[{"language":"default","tag":"Documentation","count":22},{"language":"default","tag":"Projects \u0026 SEO","count":9},{"language":"default","tag":"Agents \u0026 work","count":4},{"language":"default","tag":"Team \u0026 company","count":3},{"language":"default","tag":"Getting started","count":3},{"language":"default","tag":"Billing","count":2},{"language":"default","tag":"Changelog","count":1},{"language":"default","tag":"Updates","count":1},{"language":"default","tag":"FAQ","count":1},{"language":"default","tag":"Help","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2-autocommit","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"teamspace","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"client-snapshot-docs-config","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"index.css","content":":root{--background:#ffffff!important;--primary:#1a1918!important;--primary-light:#444444!important;--text-main:#1a1918!important;--text-muted:#6b7280!important;--border-color:#e5e7eb!important;--card-bg:#ffffff!important;--sidebar-bg:#fafafa!important}.dark{--background:#1a1918!important;--primary:#ffffff!important;--primary-light:#eeeeee!important;--text-main:#ffffff!important;--text-muted:#9ca3af!important;--border-color:#333333!important;--card-bg:#242322!important;--sidebar-bg:#111111!important}body{background-color:var(--background)!important}#sidebar-content,.sidebar-container{background-color:var(--sidebar-bg)!important}.logo,.logo img,a[href*=\"visibility.so\"] img,a[href=\"/\"] img,header img,nav img{height:38px!important;max-height:38px!important;width:auto!important}body,h1,h2,h3,h4,h5,h6{color:var(--text-main)!important}a{color:var(--primary)!important;text-decoration-color:var(--border-color)!important}.card,div[class*=Card]{background-color:var(--card-bg)!important;border:1px solid var(--border-color)!important}.card:hover,div[class*=Card]:hover{border-color:var(--primary)!important}code,pre{border-color:var(--border-color)!important}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:var(--background)}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--primary-light);border-radius:4px}#header-tabs-container .header-tab,.header-tab,nav[class*=HeaderTabs] a{font-weight:500!important;font-size:.95rem!important;padding:8px 16px!important;transition:all .25s cubic-bezier(.4,0,.2,1)!important;border-bottom:2px solid transparent!important;color:var(--text-muted)!important}#header-tabs-container .header-tab:hover,.header-tab:hover,nav[class*=HeaderTabs] a:hover{color:var(--primary)!important;opacity:1!important}#header-tabs-container .header-tab::after,.header-tab::after,.nav-tabs-item::after,.nav-tabs-item>div{display:none!important;content:none!important}.nav-tabs-item{position:relative!important;padding-bottom:0!important}.header-tab-active,.nav-tabs-item[class*=\"dark:text-gray-200\"],.nav-tabs-item[class*=text-gray-800]{color:var(--primary)!important;font-weight:600!important}.header-tab svg,.nav-tabs-item svg,nav[class*=HeaderTabs] a svg{margin-right:8px!important;width:16px!important;height:16px!important;display:inline-block!important;vertical-align:middle!important}"}],"page":{"pagePath":"integrations","slug":"/integrations","pageMetadata":{"title":"Integrations","description":"Every service Visibility connects to — Google Analytics, Search Console, WordPress, your own DataForSEO keys, your own AI clients, agent email accounts and sign-in providers — and where each one is set up.","href":"/integrations"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Every service Visibility connects to — Google Analytics, Search Console, WordPress, your own DataForSEO keys, your own AI clients, agent email accounts and sign-in providers — and where each one is set up.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Tab,Table,Tabs,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Visibility connects to the services your SEO work already runs on. Each connection lives at the level it belongs to: a data source for one website is set up on that Project, an account your whole Company shares is set up in Company settings, a mailbox belongs to one Agent, and a sign-in provider belongs to you.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Connection`}),_jsx(_components.th,{children:`Where you set it up`}),_jsx(_components.th,{children:`Who can do it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Google Analytics`}),` and `,_jsx(_components.strong,{children:`Google Search Console`})]}),_jsxs(_components.td,{children:[`Project → `,_jsx(_components.strong,{children:`Settings`}),` → `,_jsx(_components.strong,{children:`Integrations`})]}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Manage integrations`}),` (Admin and Manager by default)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`WordPress`})}),_jsxs(_components.td,{children:[`Project → `,_jsx(_components.strong,{children:`Settings`}),` → `,_jsx(_components.strong,{children:`Integrations`})]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Manage integrations`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`DataForSEO`}),` with your own keys`]}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Company settings`}),` → `,_jsx(_components.strong,{children:`AI clients`}),` → `,_jsx(_components.strong,{children:`Data providers`})]}),_jsx(_components.td,{children:`Company admins`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Your own AI clients`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Company settings`}),` → `,_jsx(_components.strong,{children:`AI clients`})]}),_jsx(_components.td,{children:`Company admins`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Agent email accounts`})}),_jsxs(_components.td,{children:[`An agent’s `,_jsx(_components.strong,{children:`Mail`}),` tab`]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Manage agents`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Sign-in providers`}),` (Google, X)`]}),_jsxs(_components.td,{children:[`Your `,_jsx(_components.strong,{children:`Account`}),` dialog`]}),_jsx(_components.td,{children:`You`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Company settings`}),` opens only for people with the `,_jsx(_components.strong,{children:`Manage company`}),` permission, so the company-level connections below are an admin job. See `,_jsx(_components.a,{href:`/team-management`,children:`Team management`}),` for the permission matrix.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`google-analytics-and-search-console`,children:`Google Analytics and Search Console`}),`\n`,_jsxs(_components.p,{children:[`Each project connects to Google Analytics and to Google Search Console `,_jsx(_components.strong,{children:`separately`}),`. The `,_jsx(_components.strong,{children:`Integrations`}),` tab has a tile for each, with its own `,_jsx(_components.strong,{children:`Connect`}),` button and its own Google consent screen asking for a single read-only permission. You can connect either one on its own.`]}),`\n`,_jsx(Frame,{caption:`Settings → Integrations: a tile per data source, each with a status badge and its own buttons.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/project-settings-integrations.jpg?fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=294819634de43838477764bcf54e84f9`,alt:`The project Integrations tab showing the Google Analytics, Google Search Console and WordPress tiles`,\"data-og-width\":`1568`,width:`1568`,\"data-og-height\":`782`,height:`782`,\"data-path\":`images/project-settings-integrations.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/project-settings-integrations.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=9a95b55b2c62322fdeeb7f1975e25148 280w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/project-settings-integrations.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=492e7ee86fa65a39167b84d8f54352b5 560w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/project-settings-integrations.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=e8d506e5a9c6fb2d4ef9fc8cb13ca198 840w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/project-settings-integrations.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=e466b24e1c8926c2ebe46681c15c9cc0 1100w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/project-settings-integrations.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=e621eb4357cd715932d7a74e373b7f6a 1650w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/project-settings-integrations.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=6a72a8d7dbdd286f9733f696c03c065a 2500w`})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Source`}),_jsx(_components.th,{children:`What it brings`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Google Search Console`})}),_jsxs(_components.td,{children:[`Clicks, impressions, CTR and average position, top queries and pages, devices, a country map — and the content opportunities on the project’s `,_jsx(_components.strong,{children:`Opportunities`}),` page.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Google Analytics (GA4)`})}),_jsx(_components.td,{children:`Organic sessions, users, new users, engagement rate, bounce rate and average time on site.`})]})]})]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open the project's Integrations tab`,children:_jsxs(_components.p,{children:[`Open the project from the sidebar, click `,_jsx(_components.strong,{children:`Settings`}),`, then `,_jsx(_components.strong,{children:`Integrations`}),`.`]})}),_jsx(Step,{title:`Click Connect on the tile you want`,children:_jsxs(_components.p,{children:[`You are sent to Google. Sign in with the account that can see the property or site and click `,_jsx(_components.strong,{children:`Allow`}),`.`]})}),_jsx(Step,{title:`Pick the property or the site`,children:_jsxs(_components.p,{children:[`You come back with the badge `,_jsx(_components.strong,{children:`Choose property`}),` (Analytics) or `,_jsx(_components.strong,{children:`Choose site`}),` (Search Console). Click it and pick from the list: GA4 properties are grouped by Analytics account, and Search Console lists only verified sites with your permission level on each. A toast confirms `,_jsx(_components.strong,{children:`Property selected`}),` or `,_jsx(_components.strong,{children:`Site selected`}),`.`]})}),_jsx(Step,{title:`Read the report`,children:_jsxs(_components.p,{children:[`The tile turns to `,_jsx(_components.strong,{children:`Connected`}),` with the property or site name. Open `,_jsx(_components.strong,{children:`Reports`}),` → `,_jsx(_components.strong,{children:`Organic Traffic`}),` to see the data. See `,_jsx(_components.a,{href:`/organic-traffic`,children:`Organic traffic`}),`.`]})})]}),`\n`,_jsxs(_components.p,{children:[`Later, use `,_jsx(_components.strong,{children:`Change property`}),` or `,_jsx(_components.strong,{children:`Change site`}),` to repoint a connection, and `,_jsx(_components.strong,{children:`Disconnect`}),` to remove it.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Only the teammate whose Google account made the connection can change the property or site — Google only lists what their account can see. Other people see a disabled button and the reason: “Only `,_jsx(_components.em,{children:_jsx(_components.a,{href:`mailto:[email protected]`,children:`[email protected]`})}),` can set this property. Disconnect and reconnect with your own Google account to manage it yourself.” Anyone with `,_jsx(_components.strong,{children:`Manage integrations`}),` may disconnect.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`when-a-google-connection-stops-working`,children:`When a Google connection stops working`}),`\n`,_jsxs(_components.p,{children:[`A red `,_jsx(_components.strong,{children:`Reconnect`}),` badge, or an inline message such as “Google Analytics read access was never granted. Reconnect and choose Allow on Google’s screen.”, means data has stopped arriving. Click `,_jsx(_components.strong,{children:`Reconnect`}),` and approve on Google. If a connection is switched off after repeated errors, the tile reads “Disconnected automatically — Google Analytics data has stopped updating.” and the people who can fix it get a notification in the `,_jsx(_components.a,{href:`/inbox-and-approvals`,children:`Inbox`}),`.`]}),`\n`,_jsx(_components.p,{children:`Disconnecting removes your Google connection for that product across the whole Company and clears this project’s selection. Other projects that relied on it fall back to another teammate’s connection if one exists.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`If Analytics and Search Console end up pointing at two different websites, the Organic Traffic report shows `,_jsx(_components.strong,{children:`Analytics and Search Console are connected to different websites`}),` and stays hidden until you fix it, so numbers from two sites are never mixed. Use `,_jsx(_components.strong,{children:`Change property`}),` or `,_jsx(_components.strong,{children:`Change site`}),`, then refresh the report.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`wordpress`,children:`WordPress`}),`\n`,_jsxs(_components.p,{children:[`Pair a project with your WordPress site through the official `,_jsx(_components.strong,{children:`Agentic SEO for Visibility`}),` plugin. No WordPress password or application password is involved — the plugin and Visibility pair with a short code.`]}),`\n`,_jsx(Frame,{caption:`The WordPress card on the project's Integrations tab.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/wordpress.jpg?fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=f963b56eac7411e4da89e70d5408b6b8`,alt:`Project Settings Integrations tab showing the WordPress card with its Connect button`,\"data-og-width\":`1568`,width:`1568`,\"data-og-height\":`782`,height:`782`,\"data-path\":`images/wordpress.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/wordpress.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=2e41ff5c4b8ab414ed638af2c4cb6221 280w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/wordpress.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=ff7cd6da7bf470e0d01bd03671dc0a3c 560w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/wordpress.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=936d6c42b8eaba8e4cd8663b51d35f1d 840w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/wordpress.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=f75be125c8ffd5f0de06c84b06d3d31b 1100w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/wordpress.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=24aee4a551b7723933fb93148d34cf36 1650w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/wordpress.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=1f6850e049b3cf3147a01b2c7c19bad7 2500w`})}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Install the plugin`,children:_jsxs(_components.p,{children:[`In WordPress, install and activate `,_jsx(_components.strong,{children:`Agentic SEO for Visibility`}),` from wordpress.org. It needs WordPress 6.0 or newer and PHP 7.4 or newer.`]})}),_jsx(Step,{title:`Generate a pairing code`,children:_jsxs(_components.p,{children:[`In Visibility, open the project → `,_jsx(_components.strong,{children:`Settings`}),` → `,_jsx(_components.strong,{children:`Integrations`}),` and click `,_jsx(_components.strong,{children:`Connect`}),` on the WordPress card, then `,_jsx(_components.strong,{children:`Generate pairing code`}),`. The code looks like `,_jsx(_components.code,{children:`VIS-A7K9-XB`}),`. It works once and expires after 10 minutes — click `,_jsx(_components.strong,{children:`Generate another`}),` if it lapses.`]})}),_jsx(Step,{title:`Paste it into the plugin`,children:_jsxs(_components.p,{children:[`In WordPress admin go to `,_jsx(_components.strong,{children:`Agentic SEO`}),` → `,_jsx(_components.strong,{children:`Connection`}),`, paste the code into `,_jsx(_components.strong,{children:`Pairing code`}),` and click `,_jsx(_components.strong,{children:`Connect`}),`.`]})}),_jsx(Step,{title:`Check the card`,children:_jsxs(_components.p,{children:[`Back in Visibility the card reads `,_jsx(_components.strong,{children:`Connected`}),` with the site name and the line “Publish requests are approved in Inbox → Approvals.”`]})})]}),`\n`,_jsxs(_components.p,{children:[`A project pairs with one site at a time; pairing again replaces the previous connection. `,_jsx(_components.strong,{children:`Disconnect`}),` on the card (or `,_jsx(_components.strong,{children:`Disconnect`}),` on the plugin’s Connection screen) unpairs the site — posts already on the site and your work in Visibility are untouched, and you can re-pair with a new code whenever you like.`]}),`\n`,_jsxs(_components.p,{children:[`Once a site is paired, a content task’s editor gains `,_jsx(_components.strong,{children:`Post to WordPress`}),`, which creates a `,_jsx(_components.em,{children:`draft`}),` on the site. Publishing is never automatic: every publish, immediate or scheduled, raises a `,_jsx(_components.strong,{children:`WordPress publish`}),` Approval that a person decides in the `,_jsx(_components.a,{href:`/inbox-and-approvals`,children:`Inbox`}),`. See `,_jsx(_components.a,{href:`/content-and-wordpress`,children:`Content and WordPress`}),` for drafting, SEO fields, images and scheduling.`]}),`\n`,_jsx(Heading,{level:`2`,id:`your-own-dataforseo-keys`,children:`Your own DataForSEO keys`}),`\n`,_jsxs(_components.p,{children:[`SEO data sources are listed company-wide under `,_jsx(_components.strong,{children:`Company settings`}),` → `,_jsx(_components.strong,{children:`AI clients`}),` → `,_jsx(_components.strong,{children:`Data providers`}),`, not per project. Each row runs either on `,_jsx(_components.strong,{children:`Visibility Data`}),` — the platform’s own account, included and metered to Credits — or on `,_jsx(_components.strong,{children:`your keys`}),`, which run on your own account and are not metered.`]}),`\n`,_jsx(Frame,{caption:`Company settings holds the company-wide connections: AI clients and Data providers.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/company-settings.jpg?fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=28e3e5d2248792e803b842681e43f948`,alt:`The Company settings page with its General, AI clients, Skills, Memory, Data and Danger zone tabs`,\"data-og-width\":`1568`,width:`1568`,\"data-og-height\":`782`,height:`782`,\"data-path\":`images/company-settings.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/company-settings.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=f4a6e9c2620a8da1c9bb992477a73983 280w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/company-settings.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=4a189804c0fe1715ca21b9004d1835cb 560w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/company-settings.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=a87525e2616e77f539a50b7202374ace 840w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/company-settings.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=3dfb5f94d8e5bc79b41181f46868384e 1100w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/company-settings.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=431cb6fb8d8097035c50d74005e27bb1 1650w, https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/company-settings.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=-1GTvD6OGO5y12MA\u0026q=85\u0026s=8f075145bce6ba4d76bd10316778d33f 2500w`})}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Data providers`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Company settings`}),` → `,_jsx(_components.strong,{children:`AI clients`}),` and scroll to the `,_jsx(_components.strong,{children:`Data providers`}),` card.`]})}),_jsx(Step,{title:`Add your credentials`,children:_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`DataForSEO`}),` row click `,_jsx(_components.strong,{children:`Connect Your Keys`}),`, enter your DataForSEO API login and password, and click `,_jsx(_components.strong,{children:`Save keys`}),`.`]})}),_jsx(Step,{title:`Confirm the switch`,children:_jsxs(_components.p,{children:[`Read “Stop using Visibility Data? … DataForSEO calls will run on your account (and won’t spend credits). You can switch back anytime.” and click `,_jsx(_components.strong,{children:`Use my own keys`}),`.`]})}),_jsx(Step,{title:`Check the badge`,children:_jsxs(_components.p,{children:[`Visibility tests the key straight away. The badge becomes `,_jsx(_components.strong,{children:`Your keys · connected`}),`, or `,_jsx(_components.strong,{children:`· connection error`}),` with the reason. Use `,_jsx(_components.strong,{children:`Test`}),` any time, `,_jsx(_components.strong,{children:`Replace keys`}),` to enter new ones, or `,_jsx(_components.strong,{children:`Use Visibility Data`}),` to move back to the included lane.`]})})]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Connecting your own key moves keyword metrics (volume, difficulty, CPC), competitor keyword data, backlink data and on-page crawls onto your DataForSEO account, where nothing is metered to Credits. Rank checks are the exception: they always run on Visibility Data and still cost Credits per keyword per check. See `,_jsx(_components.a,{href:`/credits-and-byok`,children:`Credits and BYOK`}),`.`]})}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`If your DataForSEO account restricts access by IP address, calls will fail until Visibility’s address is allowed in your DataForSEO dashboard. Contact support for the address to allow.`})}),`\n`,_jsx(Heading,{level:`2`,id:`your-own-ai-clients`,children:`Your own AI clients`}),`\n`,_jsxs(_components.p,{children:[`Every agent runs on an AI client plus a model. `,_jsx(_components.strong,{children:`Visibility AI`}),` is the managed option: there is nothing to connect, and its usage is metered to your Credits. You can also connect your own accounts under `,_jsx(_components.strong,{children:`Company settings`}),` → `,_jsx(_components.strong,{children:`AI clients`}),`, and any agent set to that client is then billed by your provider rather than in Credits.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Client`}),_jsx(_components.th,{children:`How you connect it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Claude Code`})}),_jsx(_components.td,{children:`A sign-in dialog: open the link, sign in, and enter or paste the code the provider shows.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Codex`})}),_jsx(_components.td,{children:`The same sign-in dialog.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Gemini CLI`})}),_jsx(_components.td,{children:`The same sign-in dialog.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`API Client`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Add provider`}),` → pick a provider from the dropdown → paste your `,_jsx(_components.strong,{children:`API key`}),` → `,_jsx(_components.strong,{children:`Connect`}),`. You can add several providers.`]})]})]})]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Start the connection`,children:_jsxs(_components.p,{children:[`On the client’s row click `,_jsx(_components.strong,{children:`Connect`}),`. A `,_jsx(_components.strong,{children:`Connect`}),` dialog opens for that client with a countdown, `,_jsx(_components.strong,{children:`Finish within m:ss`}),`.`]})}),_jsx(Step,{title:`Sign in with the provider`,children:_jsxs(_components.p,{children:[`Use `,_jsx(_components.strong,{children:`Copy`}),` or `,_jsx(_components.strong,{children:`Open`}),` on step 1 to open the provider’s sign-in page in a new tab. If the dialog shows a code, enter it on that page; if it asks you to paste the code the provider gives you back, paste it and click `,_jsx(_components.strong,{children:`Connect`}),`. Otherwise just wait — “Waiting for you to authorise on the page…” finishes on its own.`]})}),_jsx(Step,{title:`Confirm`,children:_jsx(_components.p,{children:`A toast confirms that the client is connected, and the row turns green with the connected account on it.`})})]}),`\n`,_jsxs(_components.p,{children:[`Only the `,_jsx(_components.strong,{children:`X`}),` or `,_jsx(_components.strong,{children:`Close`}),` control dismisses that dialog — clicking outside or pressing Escape is ignored so a sign-in in progress is not lost. If the countdown runs out you see “Sign-in window expired — close and reconnect.”`]}),`\n`,_jsxs(_components.p,{children:[`On a connected row, `,_jsx(_components.strong,{children:`Test`}),` re-checks the connection, `,_jsx(_components.strong,{children:`Models`}),` chooses which models agents may pick, and `,_jsx(_components.strong,{children:`Disconnect`}),` removes it. An API key you paste is validated with a live test; an invalid one shows “Could not validate the API key”. Each agent then picks one client and one enabled model on its `,_jsx(_components.strong,{children:`Config`}),` tab — see `,_jsx(_components.a,{href:`/agents`,children:`Agents`}),` and `,_jsx(_components.a,{href:`/company-settings`,children:`Company settings`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`agent-email-accounts`,children:`Agent email accounts`}),`\n`,_jsxs(_components.p,{children:[`Outreach agents send from a real mailbox you give them. Open the agent, then its `,_jsx(_components.strong,{children:`Mail`}),` tab: “Email accounts this agent can send from.”`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Gmail`,id:`gmail`,children:[_jsxs(_components.p,{children:[`Fill in `,_jsx(_components.strong,{children:`Label`}),`, `,_jsx(_components.strong,{children:`Gmail address`}),`, an optional `,_jsx(_components.strong,{children:`From name`}),` and a 16-character `,_jsx(_components.strong,{children:`App password`}),`, then click `,_jsx(_components.strong,{children:`Add Gmail account`}),`. Sending and reply detection are configured for you.`]}),_jsxs(_components.p,{children:[`Google refuses your normal password. Expand `,_jsx(_components.strong,{children:`How do I get an app password?`}),` for the steps, or create one at myaccount.google.com → `,_jsx(_components.strong,{children:`Security`}),` → `,_jsx(_components.strong,{children:`2-Step Verification`}),` → `,_jsx(_components.strong,{children:`App passwords`}),`. 2-Step Verification must be on for the account.`]})]}),_jsxs(Tab,{title:`Any SMTP server`,id:`any-smtp-server`,children:[_jsxs(_components.p,{children:[`Fill in `,_jsx(_components.strong,{children:`Label`}),`, `,_jsx(_components.strong,{children:`From address`}),`, `,_jsx(_components.strong,{children:`From name`}),`, `,_jsx(_components.strong,{children:`SMTP host`}),`, `,_jsx(_components.strong,{children:`Port`}),`, `,_jsx(_components.strong,{children:`Username`}),` and `,_jsx(_components.strong,{children:`Password`}),`, and turn on `,_jsx(_components.strong,{children:`Implicit TLS (port 465)`}),` if your server needs it.`]}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Inbound (IMAP)`}),` block below is optional — add the host, port, username and password there so replies stop outreach follow-ups.`]})]})]}),`\n`,_jsxs(_components.p,{children:[`Each account card offers `,_jsx(_components.strong,{children:`Edit`}),`, `,_jsx(_components.strong,{children:`Test`}),`, an enable switch and a delete button. `,_jsx(_components.strong,{children:`Test`}),` reports each leg separately, for example “Test email sent to … · IMAP OK”. Credentials are stored encrypted and never shown again; leaving a password field blank when editing keeps the stored one.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Without inbound (IMAP) details the card reads “No IMAP — replies won’t be detected” and follow-up sequences run to the end of their plan. With them, a reply stops the sequence and wakes the agent to answer. An account whose sign-in is refused disables itself, stops its sequences and raises a notification — fix the credentials and switch it back on.`})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`SEO Outreach Agent`}),` preset must be given an email account when you hire it. Every message it sends is listed under `,_jsx(_components.strong,{children:`Sent`}),` on the same tab. Only members with `,_jsx(_components.strong,{children:`Manage agents`}),` can add, edit, test, enable or remove these accounts; everyone else sees the tab read-only. See `,_jsx(_components.a,{href:`/link-building`,children:`Link building`}),` for how outreach uses them.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sign-in-providers`,children:`Sign-in providers`}),`\n`,_jsxs(_components.p,{children:[`Your own account can sign in with `,_jsx(_components.strong,{children:`Email and password`}),`, `,_jsx(_components.strong,{children:`Google`}),` and `,_jsx(_components.strong,{children:`X`}),`. Open the `,_jsx(_components.strong,{children:`Account`}),` dialog from your name at the bottom of the sidebar and read the `,_jsx(_components.strong,{children:`Sign-in methods`}),` card: each tile shows `,_jsx(_components.strong,{children:`Connected`}),` (with the date it was linked, for Google and X) or `,_jsx(_components.strong,{children:`Not connected`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The card is informational — there are no Connect or Disconnect buttons. To add Google or X, sign out and sign back in with `,_jsx(_components.strong,{children:`Continue with Google`}),` or `,_jsx(_components.strong,{children:`Continue with X`}),` using the same confirmed email address, and the provider is linked automatically. To add email and password to a Google- or X-only account, use `,_jsx(_components.strong,{children:`Set a password`}),` in the same dialog. See `,_jsx(_components.a,{href:`/account`,children:`Your account`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`The Connect button is greyed out`,id:`the-connect-button-is-greyed-out`,children:_jsxs(_components.p,{children:[`You need the `,_jsx(_components.strong,{children:`Manage integrations`}),` permission for the project connections, which the `,_jsx(_components.strong,{children:`Admin`}),` and `,_jsx(_components.strong,{children:`Manager`}),` roles have by default. Hover the button for the reason. Company-level connections need `,_jsx(_components.strong,{children:`Manage company`}),`.`]})}),_jsx(Accordion,{title:`The Google picker is empty`,id:`the-google-picker-is-empty`,children:_jsx(_components.p,{children:`Search Console lists only verified sites (“No verified sites on this Google account.”) and Analytics only GA4 properties (“No GA4 properties on this Google account.”). Sign in with a different Google account, or ask the site owner to grant your account access in Google first.`})}),_jsx(Accordion,{title:`The pairing code expired`,id:`the-pairing-code-expired`,children:_jsxs(_components.p,{children:[`Codes work once and last 10 minutes. Click `,_jsx(_components.strong,{children:`Generate another`}),` in the `,_jsx(_components.strong,{children:`Connect WordPress`}),` dialog and paste the new one.`]})}),_jsx(Accordion,{title:`An agent cannot post to WordPress`,id:`an-agent-cannot-post-to-wordpress`,children:_jsxs(_components.p,{children:[`Check that the task’s project has a paired site, and that the agent’s `,_jsx(_components.strong,{children:`Access`}),` tab grants `,_jsx(_components.strong,{children:`WordPress`}),`. Even then, every publish waits for an Approval in the `,_jsx(_components.a,{href:`/inbox-and-approvals`,children:`Inbox`}),`.`]})}),_jsx(Accordion,{title:`DataForSEO calls fail after you add your keys`,id:`dataforseo-calls-fail-after-you-add-your-keys`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Test`}),` on the row to see the error. If your DataForSEO account restricts access by IP, contact support for the address to allow, then test again.`]})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Integrations","description":"Every service Visibility connects to — Google Analytics, Search Console, WordPress, your own DataForSEO keys, your own AI clients, agent email accounts and sign-in providers — and where each one is set up.","href":"/integrations"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Google Analytics and Search Console","slug":"google-analytics-and-search-console","depth":2,"children":[{"title":"When a Google connection stops working","slug":"when-a-google-connection-stops-working","depth":3,"children":[]}]},{"title":"WordPress","slug":"wordpress","depth":2,"children":[]},{"title":"Your own DataForSEO keys","slug":"your-own-dataforseo-keys","depth":2,"children":[]},{"title":"Your own AI clients","slug":"your-own-ai-clients","depth":2,"children":[]},{"title":"Agent email accounts","slug":"agent-email-accounts","depth":2,"children":[]},{"title":"Sign-in providers","slug":"sign-in-providers","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"doableteam-a944c448","siteName":"Visibility Docs","title":"Integrations - Visibility Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-03T11:19:40.002Z","originalFileLocation":"integrations.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Every service Visibility connects to — Google Analytics, Search Console, WordPress, your own DataForSEO keys, your own AI clients, agent email accounts and sign-in providers — and where each one is set up.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Visibility Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Integrations - Visibility Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Every service Visibility connects to — Google Analytics, Search Console, WordPress, your own DataForSEO keys, your own AI clients, agent email accounts and sign-in providers — and where each one is set up.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Visibility Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.visibility.so/integrations\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Integrations - Visibility Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Every service Visibility connects to — Google Analytics, Search Console, WordPress, your own DataForSEO keys, your own AI clients, agent email accounts and sign-in providers — and where each one is set up.\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/doableteam-a944c448/ppFUL9WdIUUntbf2/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Visibility Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#171717\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.visibility.so/integrations\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.visibility.so/#organization\",\"name\":\"Visibility Docs\",\"url\":\"https://docs.visibility.so\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/doableteam-a944c448/yZxfxMRqwidNc6fj/logo/light.png?fit=max\u0026auto=format\u0026n=yZxfxMRqwidNc6fj\u0026q=85\u0026s=e1fd35ed3273f515f71eeea2dadf78bc\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.visibility.so#website\",\"name\":\"Visibility Docs\",\"url\":\"https://docs.visibility.so\",\"publisher\":{\"@id\":\"https://docs.visibility.so/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.visibility.so/integrations#webpage\",\"url\":\"https://docs.visibility.so/integrations\",\"name\":\"Integrations\",\"description\":\"Every service Visibility connects to — Google Analytics, Search Console, WordPress, your own DataForSEO keys, your own AI clients, agent email accounts and sign-in providers — and where each one is set up.\",\"dateModified\":\"2026-09-03T11:19:40.002Z\",\"isPartOf\":{\"@id\":\"https://docs.visibility.so#website\"},\"breadcrumb\":{\"@id\":\"https://docs.visibility.so/integrations#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.visibility.so/integrations#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Visibility Docs\",\"item\":\"https://docs.visibility.so\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integrations\",\"item\":\"https://docs.visibility.so/integrations\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.visibility.so/integrations#article\",\"headline\":\"Integrations\",\"name\":\"Integrations\",\"description\":\"Every service Visibility connects to — Google Analytics, Search Console, WordPress, your own DataForSEO keys, your own AI clients, agent email accounts and sign-in providers — and where each one is set up.\",\"url\":\"https://docs.visibility.so/integrations\",\"mainEntityOfPage\":{\"@id\":\"https://docs.visibility.so/integrations#webpage\"},\"dateModified\":\"2026-09-03T11:19:40.002Z\",\"publisher\":{\"@id\":\"https://docs.visibility.so/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.visibility.so#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Visibility Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Visibility Docs","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","groups":[{"group":"Getting started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Getting started","href":"/getting-started"},{"title":"Navigating the app","href":"/navigating-the-app"}]},{"group":"Agents \u0026 work","pages":[{"title":"Agents","href":"/agents"},{"title":"Tasks","href":"/tasks"},{"title":"Chat","href":"/chat"},{"title":"Inbox and approvals","href":"/inbox-and-approvals"}]},{"group":"Projects \u0026 SEO","pages":[{"title":"Projects","href":"/projects"},{"title":"SEO features","href":"/seo-features"},{"title":"Keyword rankings","href":"/keyword-rankings"},{"title":"AI Visibility","href":"/ai-visibility"},{"title":"Organic traffic","href":"/organic-traffic"},{"title":"Opportunities","href":"/opportunities"},{"title":"Custom dashboards","href":"/dashboards"},{"title":"Content and WordPress","href":"/content-and-wordpress"},{"title":"Link building","href":"/link-building"}]},{"group":"Team \u0026 company","pages":[{"title":"Team management","href":"/team-management"},{"title":"Company settings","href":"/company-settings"},{"title":"Your account","href":"/account"}]},{"group":"Billing","pages":[{"title":"Billing and subscriptions","href":"/billing-and-subscriptions"},{"title":"Credits and BYOK","description":"How credits are refilled and spent, how to top up, and how to run SEO data and AI on your own accounts instead.","href":"/credits-and-byok"}]},{"group":"Configuration","pages":[{"title":"Integrations","href":"/integrations"}]}]},{"tab":"Changelog","icon":"megaphone","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"FAQ","icon":"circle-question","pages":[{"title":"FAQ","href":"/faq"}]}]},"title":"Integrations - Visibility Docs","buildId":"dpl_CUnGQP1HgFUzoxatVC37y4zP83Vx","deploymentId":"dpl_CUnGQP1HgFUzoxatVC37y4zP83Vx","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BCFzRGe_.js","DynamicMarkdown-BUuAYxJE.js","zoom-image-lightbox-DQ5W4Q2v.js","PlusIcon-jZ8vgk6R.js","lightbox-handle-r17bVUz3.js"]}