Integration kinds
Positions come from completed SERP rank checks. Analytics sources add context,
but they do not set or replace rank positions.
Deploy webhooks are a separate inbound integration for timeline signals. Use
them when you want deployments from a hosting provider or CI system to appear
alongside rank and traffic changes. See Deploy webhooks.
Connect from the app
- Open Integrations in the app.
- Choose a SERP provider and select Connect.
- Enter the provider credentials listed below.
- Select Test connection. Credential-based, non-OAuth providers must pass this test before you can save the connection.
- Set the optional Cost estimate per check (USD).
- Save the connection.
- Use SERP fallback order to activate providers and arrange the exact top-to-bottom order used for rank checks.
DataForSEO
Use DataForSEO when you want pay-as-you-go SERP requests with provider-reported per-request cost.
Bisibility currently uses DataForSEO Live. Its estimated cost is about
$0.0020
for Top 10 and $0.0155 for Top 100 because additional pages are billed below
the first-page rate. Bisibility stores the actual cost reported by DataForSEO
for each completed check; if the provider does not report a positive cost, the
app falls back to the connection’s configured per-check estimate.
When Stop checks at first domain match is on, Bisibility sends
stop_crawl_on_match with the tracked domain. DataForSEO may then crawl fewer
pages than the configured depth, and the actual provider-reported cost is still
what Bisibility records.
Optional environment fallback credentials:
SerpApi
Use SerpApi when you prefer a subscription plan with a monthly search quota.
SerpApi plans include a monthly search allowance. SerpApi responses do not give
Bisibility a per-response dollar cost, so configure the connection’s per-check
estimate yourself. Multiply your effective per-search price by
ceil(depth / 10) for your configured depth. For example, $275 / 30,000
searches is about $0.00917 per search; a Top-100 check uses up to 10 searches,
so enter about 0.0917.
Optional environment fallback credential:
Stop checks at first domain match
This project setting is on by default. Bisibility stops as soon as the tracked domain is found, so actual SerpApi searches per check are often fewer thanceil(depth / 10). The configured per-check estimate remains the worst-case
value for the selected depth. Turn the setting off when complete full-depth
competitor snapshots matter more than provider cost.
SERP fallback order
The integrations page shows one dedicated order for SERP providers. Active connections are tried from top to bottom. Paused and disconnected providers are shown separately and are not used for rank checks. If a rank check succeeds, bisibility stores the result with the provider that returned it. If a provider request fails, is rate-limited, or cannot use its stored credentials, bisibility tries the next enabled provider in the chain. If every provider is rate-limited, the check is deferred for a later retry. If every provider fails for another reason, the check fails with a provider error.Budget cap
Provider spend is bounded by a monthly budget set per workspace in Settings > Provider usage. New workspaces start at$50.00. Workspace
owners and admins change the cap with Edit budget; every budget change is
recorded in the audit log with the actor, the old cap, and the new cap.
The enforced total combines rank-check spend with paid provider lookup ledger
entries. Scheduled and manual checks, ranked-keyword suggestions, keyword
research, and keyword metrics pause once the workspace reaches the cap, and
nothing is charged beyond it. Cached lookups stay free. Spend resets at the
start of each calendar month, measured in UTC; in other timezones the reset
lands a few hours before or after local midnight on the 1st.
In-app spend meters use this same enforced monthly total. The session amount
resets when the app reloads and uses provider-reported costs where available;
manual rank checks use the displayed estimate until their result includes an
actual provider cost.
Raise the budget only after estimating provider spend. The public calculator at
/rank-tracking-cost-calculator estimates
monthly volume across search-term count, locations, devices, schedule, and provider.
Analytics sources
Google Search Console, Google Analytics 4, and Plausible are optional analytics sources. Search Console imports clicks and impressions from Search Analytics, index status from URL Inspection, and sitemap status. GA4 imports organic-search sessions, engagement rate, and key events per landing page. Analytics imports add owned-data context to rank reports; they do not run rank checks.Google OAuth client setup
Google Search Console and GA4 share one Google OAuth 2.0 web client. It is the same client used for optional Google social sign-in, extended with analytics scopes.- Create or select a project in the Google Cloud console.
-
Enable these APIs on the project:
- Google Search Console API - Search Analytics, URL Inspection, and sitemap calls.
- Google Analytics Data API - GA4 traffic reports.
- Google Analytics Admin API - lists the GA4 accounts and properties shown in the property picker during connect.
-
Configure the OAuth consent screen (Google Auth Platform) with these scopes:
openidandemailhttps://www.googleapis.com/auth/webmastersfor Search Console. The full scope is required, notwebmasters.readonly, because sitemap re-submission is a write call.https://www.googleapis.com/auth/analytics.readonlyfor GA4.
-
Create an OAuth client with the Web application type and add the
authorized redirect URI built from your instance origin (
SITE_URL):For local development,http://localhost:3000/api/integrations/google/callbackworks; Google allows plainhttponly for localhost. -
Set the client credentials in the environment and restart the app:
- Open Integrations and connect Google Search Console or GA4.
Finding your GA4 Property ID
Google Analytics 4 exposes several identifiers. Bisibility needs the digits-only Property ID used by the Google Analytics Data API.- Open Google Analytics 4 and select the property you want to connect.
- Select Admin (the gear in the bottom-left corner).
- Under Property settings, select Property details.
- Copy the digits-only Property ID, such as
123456789.
Troubleshooting analytics connections
If a traffic sync fails withconfig_invalid, open Integrations, manage the
affected connection, and re-select the property. For GA4, confirm that the
saved value is the digits-only Property ID described above.
Data freshness and Google API quotas
The daily traffic sync makes two bulk Search Analytics queries per Search Console property - one for the stored 28-day aggregate and one for the stored 7-day aggregate - and matches the returned queries to tracked keywords locally. Each bulk query may use up to three paginated API requests on very large properties. The cost does not grow with the number of tracked keywords. The same sync makes one additional page-stats call per property. Search Analytics data is read with a three-day lag because Google finalizes it late; running the sync more often would not produce fresher data, so bisibility syncs it daily. CTR-drop alerts read those stored 28-day and 7-day aggregates with the same lag. Index-status checks use the separate URL Inspection API. The daily presence sync inspects up to the project’s Daily inspection limit target URLs, oldest-checked first. ThisinspectionDailyLimit setting is the maximum number
of URL Inspection calls the project makes per day. The default is 50; set it
to 0 to turn off presence sync for that project. The app reads stored
inspection results in the UI and does not inspect URLs on demand.
Google documents these Search Console API limits:
Search Analytics has no daily per-property cap. Google does not expose an API
for remaining Search Console quota. Inspect usage in the Google Cloud Console
quotas tab; an HTTP
429 response is the runtime backstop.
Bisibility applies two URL Inspection controls before making a request:
- The project limit controls how many target URLs that project may inspect per day.
- The instance applies a shared
1,600-inspection daily safety cap to every project connected to the same Google account and property. Self-hosters can change it withBISIBILITY_GSC_INSPECTION_DAILY_BUDGET.
429 remains the final backstop.
For N tracked target URLs and a project limit L greater than zero, each URL
is re-inspected about every ceil(N / L) days. For example, 120 URLs at a limit
of 50 rotate through all URLs in three days.
Quota exhaustion never requires manual unpausing. Only broken Google
authorization requires user action.
Rank positions still come exclusively from SERP providers. Search Console adds
owned traffic and index-status context; it never sets positions.
Plausible connects with these fields:
Plausible imports add traffic and sessions context; they do not run rank checks.