You can build an SEO tracking dashboard in Bubble that monitors keyword rankings, organic traffic, and page performance by connecting to Google Search Console via the API Connector. This tutorial covers setting up the API integration, storing ranking data over time, building visual dashboards with charts, and alerting on significant ranking changes.
Overview: Building an SEO Tracker in Bubble
This tutorial guides you through building an SEO monitoring dashboard in Bubble. You will connect to the Google Search Console API to fetch keyword rankings, clicks, and impressions data. The data is stored in your Bubble database for historical tracking, displayed in visual charts, and monitored for significant changes. This is ideal for founders who want to track their SEO performance without paying for expensive third-party tools.
Prerequisites
- A Bubble account with the API Connector plugin installed
- A Google Cloud Console account with Search Console API enabled
- A website verified in Google Search Console
- Basic understanding of API Connector OAuth setup in Bubble
Step-by-step guide
Set up Google Search Console API access
Set up Google Search Console API access
Go to console.cloud.google.com. Create a new project or select an existing one. Navigate to APIs & Services → Library, search for Google Search Console API, and click Enable. Then go to APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID. Select Web application. Add your Bubble OAuth redirect URI: https://yourapp.bubbleapps.io/api/1.1/oauth_redirect. Copy the Client ID and Client Secret.
Pro tip: You can also use a Service Account for server-to-server access without user OAuth, but OAuth is simpler for a single-user tool.
Expected result: Google Search Console API is enabled and OAuth credentials are ready.
Configure the API Connector with OAuth
Configure the API Connector with OAuth
In the Plugins tab, open the API Connector. Add a new API called Google Search Console. Set Authentication to OAuth2 User-Agent Flow. Enter the Client ID, Client Secret, Scope (https://www.googleapis.com/auth/webmasters.readonly), Authorization URL (https://accounts.google.com/o/oauth2/auth), and Token URL (https://oauth2.googleapis.com/token). Add an API call named Get Search Analytics. Method: POST. URL: https://www.googleapis.com/webmasters/v3/sites/[site_url]/searchAnalytics/query. Set the body to request search data with dimensions for query, page, and date.
1POST https://www.googleapis.com/webmasters/v3/sites/[site_url]/searchAnalytics/query23Body:4{5 "startDate": "[start_date]",6 "endDate": "[end_date]",7 "dimensions": ["query", "date"],8 "rowLimit": 1009}1011Response:12{13 "rows": [14 {15 "keys": ["keyword", "2026-03-27"],16 "clicks": 45,17 "impressions": 1200,18 "ctr": 0.0375,19 "position": 3.220 }21 ]22}Expected result: The API Connector is configured with OAuth and can fetch search analytics data from Google Search Console.
Create the data model for tracking
Create the data model for tracking
Go to the Data tab and create these Data Types. TrackedSite: url (text), name (text), owner (User). KeywordData: site (TrackedSite), keyword (text), date (date), clicks (number), impressions (number), ctr (number), position (number). RankingAlert: site (TrackedSite), keyword (text), old_position (number), new_position (number), change (number), alert_date (date), is_read (yes/no). These types let you store daily snapshots and detect changes over time.
Expected result: Data types are created to store sites, keyword performance data, and ranking change alerts.
Build the SEO dashboard with charts
Build the SEO dashboard with charts
Create a page called seo-dashboard. Add a site selector Dropdown at the top. Below it, create a summary row showing total clicks, total impressions, average position, and average CTR for the selected date range (use Do a search for KeywordData with :each item's clicks :sum etc.). Add a line chart (using the Bubble Chart plugin or Chart.js plugin) showing clicks and impressions over time. Add a Repeating Group below showing the top keywords sorted by clicks descending, with columns for keyword, clicks, impressions, CTR, and average position.
Expected result: A dashboard displays SEO metrics with trend charts and a sortable keyword table.
Schedule daily data fetching
Schedule daily data fetching
Create a backend workflow called fetch-daily-seo-data. This workflow calls the Google Search Console API for each TrackedSite, requesting data for yesterday's date. For each row in the response, create a KeywordData record. Before creating, check if a record for that keyword and date already exists to prevent duplicates. Schedule this workflow to run daily at a fixed time (e.g., 6 AM). Enable backend workflows in Settings → API tab. Set up the initial schedule by triggering it once from a button on the admin page.
Pro tip: Google Search Console data has a 2-3 day delay. Fetch data for 3 days ago to ensure complete numbers. For advanced SEO monitoring needs, RapidDev can help build comprehensive tracking systems with competitor analysis.
Expected result: SEO data is fetched automatically every day and stored in your database for historical tracking.
Set up ranking change alerts
Set up ranking change alerts
In the daily fetch workflow, after storing new data, compare each keyword's current position with its position from 7 days ago (Do a search for KeywordData where keyword = this keyword AND date = Current date - 7 days). If the position changed by more than 3 spots, create a RankingAlert record. On the dashboard, add a Notifications section showing recent alerts. Style position improvements in green and drops in red. Add email notifications for significant drops (position worsened by more than 5 spots) using the Send email action.
Expected result: Significant ranking changes trigger alerts visible on the dashboard and optionally via email.
Complete working example
1SEO TRACKER WORKFLOW SUMMARY2=============================34DATA TYPES:5 TrackedSite: url, name, owner (User)6 KeywordData: site, keyword, date, clicks,7 impressions, ctr, position8 RankingAlert: site, keyword, old_position,9 new_position, change, alert_date, is_read1011API CONNECTOR:12 API: Google Search Console13 Auth: OAuth2 User-Agent Flow14 Scope: webmasters.readonly15 Call: Get Search Analytics (POST, Action)16 URL: .../searchAnalytics/query17 Body: startDate, endDate, dimensions, rowLimit1819PAGES:20 seo-dashboard: Charts, keyword table, alerts21 manage-sites: Add/remove tracked sites2223BACKEND WORKFLOW: fetch-daily-seo-data24 Runs: Daily at 6:00 AM25 1. Search TrackedSites (all active)26 2. For each site:27 a. Call Get Search Analytics (3 days ago)28 b. For each row in response:29 - Check if KeywordData exists for keyword+date30 - If new: Create KeywordData31 - Compare position to 7 days ago32 - If changed > 3 positions: Create RankingAlert33 3. Schedule self for tomorrow at 6:00 AM3435DASHBOARD ELEMENTS:36 - Summary row: total clicks, impressions, avg position37 - Line chart: clicks/impressions over last 30 days38 - Keyword table: sorted by clicks desc39 - Alerts panel: recent ranking changes40 - Date range picker for filteringCommon mistakes when building an SEO tracker in Bubble
Why it's a problem: Trying to fetch real-time ranking data
How to avoid: Fetch data for 3 days ago to ensure the numbers are finalized and accurate.
Why it's a problem: Not encoding the site URL parameter properly
How to avoid: URL-encode the site parameter. In Bubble, use the :encoded operator on the text value before passing it to the API call.
Why it's a problem: Storing CTR as a percentage instead of a decimal
How to avoid: Store the raw decimal and multiply by 100 when displaying. Format as percentage using :formatted as with the % suffix.
Best practices
- Fetch data for 3 days ago to account for Google Search Console's processing delay
- Store daily snapshots to enable trend analysis and historical comparison
- URL-encode site URLs before passing them to the API endpoint
- Set up alerts for significant ranking changes (more than 3-5 position shifts)
- Display CTR as a percentage in the UI even though the API returns decimals
- Use pagination when fetching data (rowLimit parameter) to handle sites with many keywords
- Add date range filtering to the dashboard so users can analyze specific periods
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I want to build an SEO tracking dashboard in Bubble.io that connects to Google Search Console API. I need to fetch keyword rankings, clicks, and impressions daily, store historical data, display trends in charts, and alert me on significant ranking changes. Can you outline the API setup, data model, and workflows?
Build an SEO tracker for my app. Connect to Google Search Console API to fetch keyword data. Create a dashboard with trend charts, a keyword ranking table, and alerts when positions change significantly. Schedule daily data fetching via backend workflows.
Frequently asked questions
Is Google Search Console API free to use?
Yes. The Google Search Console API is free with no usage charges. You only need a Google Cloud project with the API enabled and OAuth credentials configured.
How far back can I fetch historical data?
Google Search Console retains 16 months of data. You can backfill your tracker by fetching historical data in batches when you first set up the integration.
Can I track competitor keywords too?
Google Search Console only provides data for your own verified sites. For competitor tracking, you would need to integrate a third-party SEO API like SEMrush, Ahrefs, or SERPapi.
How many keywords can I track?
The API returns up to 25,000 rows per request. For most sites, the default rowLimit of 100-500 top keywords is sufficient. Increase the limit for large sites.
Will this use a lot of workload units?
A daily fetch for one site with 100 keywords creates about 100 database records per day. This is minimal in terms of workload units. Storing data for 365 days across 100 keywords is about 36,500 records — well within Bubble's capabilities.
Can RapidDev help build advanced SEO tools?
Yes. RapidDev can help build comprehensive SEO platforms with competitor tracking, automated reporting, content optimization suggestions, and integrations with multiple SEO data sources.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation