- New Listicle gap (AI), under Reports: finds the "best" and "top 10" lists that ChatGPT, Claude, Gemini, Perplexity and Google AI Overviews cite for your searches, opens each one, and shows who is listed. Lists that name your competitors but not you are your gaps.
- New Listicle gap: who is on the most lists (you against your competitors), a next step for each list (pitch the author, use the submission form, claim a directory listing), the prompts where AI leans on lists, and a CSV for outreach. Optional live Google searches for "best ..." queries. Save it or share it to the client portal.
Changelog
What's new in SEO App
Every improvement, new feature and fix we ship, newest first. Updates go live as soon as they are released.
- Improved Rank dropout protection: a keyword on pages 1-2 that suddenly shows as not in the top 100 keeps its last found position until 5 checks in a row miss it. It used to show the drop after 2 checks. Days where no ranking came back at all (an API outage) do not count as misses.
- Improved The same rule now applies everywhere: the keyword table, the client portal, dashboard counts, history charts, reports, Why did this drop?, the API and webhooks. Clients no longer see the "?" mark on held positions; your team still does, with how many checks missed it.
- Fixed The monthly rank check on the 2nd no longer gets stuck on one project that cannot be checked (no mobile or desktop keywords, or a DataForSEO error), which left every project after it unchecked for the day.
- Fixed The monthly rank check no longer jumps over the next project each time it checks one.
- Improved The Refresh Rankings queue and the monthly check for projects with over 100 keywords are now on the admin status board.
- New Content cleanup: choose what to scan (all pages, blog posts only, pages only, or one folder), how many pages, and how many index checks.
- Improved Content cleanup: starting a new scan no longer hides the last report. The last 10 scans of each project are kept, and you can open any of them, download its CSV, or save and share it.
- Improved Content cleanup: scans of different projects run side by side, a running scan can be cancelled, and a project open in two tabs no longer does the same work twice.
- New Content cleanup: a background job (cronjob/content_cleanup_cron, every 5 minutes) carries scans on after their page is closed.
- New Content cleanup (Reports): scans every page of a site from the sitemap, Search Console and Google Analytics, checks with Google which pages without impressions are indexed, and sorts each page into what to do: not in Google and no visits, in Google but no traffic in 12 months (delete and redirect, or merge, with a suggested target page), seen but not clicked (repurpose), old and barely visited (refresh), tag and archive pages (noindex), broken or redirecting (fix), and keep. Pages with traffic, leads or first-page rankings are always kept, and pages that rank for tracked keywords are never marked for deletion. Save it, share it to the client portal, or download every page as a CSV.
- Fixed Adding a Google Analytics property no longer says "Site is already exist" when the property is not in the list: an old hidden connection (Universal Analytics) or one left on a deleted project is reused and linked to the chosen project. If the property really is connected to another project, the message says which one. Search Console says which site a project is already connected to.
- Fixed Dashboard Needs attention: "no rank check since" and "latest results not saved yet" now go by each project's newest saved rank check, so projects checked hours ago are no longer flagged when the daily ranking summary is behind.
- New Error alerts: crashes and error pages on seoapp.io and the client portal are recorded and emailed to the admin, grouped per error with how many times it happened. An error that keeps happening is emailed again at most every 6 hours. See them all under Admin > Errors and slow pages.
- New Slow page alerts: any page taking longer than 3 seconds is recorded, and a page that is slow 3 or more times in an hour is emailed (at most once a day per page) with its average and worst load time.
- New Setup checklist on the projects list: each project shows Setup 5/8 with what is missing (keywords, rank checks, Search Console, Google Analytics, category, uptime monitor, URL map, logged work) and a Fix link for each. Needs setup now follows the first six steps.
- Improved Sign-in is now limited: after 5 wrong passwords for an account in 15 minutes it pauses for 15 minutes (3 and 30 minutes with the strict policy), and an address that gets 30 wrong passwords across any accounts is paused too. A correct sign-in resets the count, and the account owner gets a notification the first time it pauses. This covers the team sign-in, the two-factor code step, password reset emails and the client portal.
- Improved URL maps (was Keyword File Map): anyone who can open a project can now add a map. Paste keyword and page pairs in any order (or copy two columns from a spreadsheet), upload a CSV or Excel file, or start from the project's tracked keywords with the page each ranks on now. Each map shows Right page, Wrong page ranks, Not ranking yet and Not tracked per keyword, checked against the same rankings as the keyword report, with search, filters, Excel download and a working delete.
- New Campaign timeline: work is now measured with Google Analytics too (visits from Google search and leads on the pages the work touched), next to keyword rankings and Search Console clicks. Search Console and Analytics also cover the pages the AI linked.
- Improved Campaign timeline in plain English: each piece of work starts with a sentence like "This looks like it helped: its 2 keywords moved up about 2 spots on Google...", results read Helped / Hurt / No clear change / Too soon to tell / Can't measure yet, the top shows which data is connected, and "How we judge each piece of work" explains the method.
- New Campaign timeline: Analyze on each piece of work. AI reads the task, its note and time entries next to your tracked keywords and ranking pages, then says what was done, which pages and keywords it touched, how much it can move the campaign and how to read what moved afterwards. The pages and keywords it links are used to measure the work too (switch that off per item). Analyze the rest reads every item on the page in one go.
- Improved Campaign timeline: a new Campaign pulse at the top shows how first page % moved over the range, how many pieces of work improved things, where the hours went by kind of work, the work that moved the needle most and what needs a look.
- Fixed Campaign timeline and Google setup: task titles, notes and other text are now always escaped, so text containing HTML shows as text.
- New SERP sensor: a Clients by category list shows every client grouped by category, with search and a quick category change on each client. Clients without a category are listed first, since they are left out of the sensor readings.
- Improved What's new in the top bar turns into a gold "N new" button when there are updates you haven't seen, and the new items are highlighted when you open it.
- New Campaign timeline (the project's Timeline button): work done for the client, from PeakKR or added by hand, alongside keyword changes, Google updates, downtime and automatically detected ranking and traffic shifts. Each piece of work shows what moved after it, and every shift lists the possible causes from the 30 days before.
- New API v2: work-events endpoints so PeakKR can send completed tasks and time entries.
- New Why did this drop? on any keyword (keyword report, keyword history, client portal): the search results before and after side by side, who moved above you, whether your ranking page changed, new search features and map pack changes, Google updates in between, and a plain-English summary.
- New Traffic drop check (Reports): compares two periods across Google Analytics, Search Console, rankings, Google Maps, AI Overviews, downtime and Google updates, and says where a traffic drop most likely comes from. It can be shared to the client portal and printed.
- New Bulk keyword import: paste or upload keyword, city and device rows. The preview flags duplicates, unknown or ambiguous locations, mismatched cities and bad devices before anything is added.
- Improved Page 1 opportunities: filter by project and sort by closest to page one, volume, keyword or project.
- Improved Location search offers states (e.g. Arkansas) before the towns in them.
- Fixed Projects list: the + under Users opens Assign users. Client portal: the cannibalization card, rank distribution and Shared Reports load again.
- Fixed Adding keywords: an account can reach its exact keyword limit.
- Fixed Rank checks no longer get stuck: a failed check used to lock the project so it was never checked again. Failed checks now retry, and a nightly repair unsticks any project and fixes frozen "last checked" dates.
- Fixed Projects that never had a check schedule (for example some added without keywords or imported) are now checked daily.
- Improved Rank Distribution, period and monthly reports, the ranking email, the success report, client portal cards and the API now count positions exactly like the keyword table.
- Fixed Client portal summary cards could count a competitor's ranking as the client's. The consolidated report's "in top 10" now counts page one only.
- Fixed Dashboard Search Console totals counted earlier months again; each site now counts once.
- Fixed Keyword history shows one location at a time when a keyword is tracked in several cities of the same country.
- Fixed The "Rankings dropped" notification no longer fires because a single check missed a keyword.
- Improved Needs attention counts missed weekday checks only and says when a check is stuck.
- Improved The same confirmation box on every page; deleting an uptime monitor, domain or DNS monitor refreshes the list again.
- New Needs attention on the dashboard: sites that are down, projects that lost page-one keywords this week, projects whose rank checks stopped, and Google connections that need a new sign-in, each with a link to fix it.
- New Page 1 opportunities: "View all" opens the full list of keywords at #11 to #15, biggest search volume first, with the #10 result to beat.
- Improved Dashboard: "Where your keywords rank" matches the keyword reports and compares with a week before. The AI visibility and Search Console cards show the top three projects.
- Fixed Dashboard: the status line shows when positions were really updated and any live alerts, the LLM tracking link works, and Search Console drops show in red.
- New Keyword history follows a keyword when you switch its location: earlier checks stay on the chart up to the move, with a marker showing when and where it moved.
- New "All time" option in the keyword report's date picker, starting the day after the project was created.
- Fixed Keyword History chart: each month now counts every tracked keyword, and the current month matches the keyword table exactly, including keywords shown with "?" and AI Overview positions.
- Fixed Keyword History chart: shares are of tracked keywords, so Top 3 plus 4-10 adds up to the real first page share. AI Overview and Local Pack are now thin lines over the bars.
- Fixed First page % on the projects list now uses the same positions as the keyword report, for every keyword's own location and device, and stays up to date for every date range.
- Fixed Custom dates in the keyword report's date picker can be picked up to today.
- Fixed Ticked checkboxes in the keyword table now show as ticked.
- Improved US spelling throughout: color, favorited, cannibalization, prioritized, center.
- New Client portal light mode, with a sun/moon switch next to the user's name.
- New Client sign-in page carries the agency's logo and color, with no SEO App branding.
- New Print / Save as PDF on the Reports section, performance report, location check, success report, Google Ads and Analytics reports: a clean white page with a small header.
- Improved Emails share one modern layout. Emails to an agency's clients show the agency's logo and color.
- Improved Monthly SEO report redesigned to match the app; the client copy uses the agency's branding.
- Improved Confirmations and messages look the same everywhere, work with the keyboard and fit phones.
- Improved Charts use the same colors for the same things on every page, and date ranges use one picker with the same presets.
- Improved Share of voice, cannibalization and SERP features show placeholders while loading and a plain message if they can't load.
- Fixed Keyword history chart now counts keywords missed by one check in their previous position, the same as the keyword table.
- Fixed Monthly report: increases showed red in the client copy, a worse Search Console position showed as a green up arrow, and top pages sorted numbers as text.
- Fixed Success and error messages had their title and text swapped. Keyword finder list shows volume. DNS monitor columns line up with their headings.
- New Connect Google page (account menu): one place to set up GA4, Search Console and Google Ads, showing which steps are done and the button for the next one.
- New Getting started checklist on the dashboard until your account is fully set up.
- Improved Shorter sidebar: related tools are grouped into fewer sections, and the old Go Back buttons are gone.
- Improved Pages show grey placeholders while charts and numbers load, and a plain message if something could not load, instead of "Loading..." that never went away.
- Improved Keyword report, GA4 dashboard and client portal pages fit phone screens: buttons wrap, cards stay on screen and controls are easier to tap.
- Improved Table columns no longer squeeze or cut off headings at the larger text size; long URLs and domains wrap inside their cell.
- Fixed Google sign-in: Search Console credentials upload is now picked up by sign-in, and GA4 sign-in asks for consent so the connection stays working.
- Fixed Keyword links on position tracking kept their color after running Compare. Keyword finder list shows the Volume column again. "Favourited" is now spelled "Favorited".
- Improved Bigger, more readable text across the app and the client portal: body text is larger, small labels are no longer tiny, and secondary text has more contrast in dark and light mode.
- New Text size in the account menu: Small, Default or Large, remembered on this browser.
- New Every page opens with a short introduction: where it sits in the menu, what the page is for, and its main buttons. Client portal pages explain in plain words what the client is looking at.
- Improved Tables line up numbers on the right, highlight the row under the pointer, and keep the first column in view when a wide table scrolls sideways.
- Improved Empty lists now say what is missing and what to do next instead of just "No data".
- Fixed Several small fixes found along the way: the Update permission button, the bulk backlink checker form, keyword difficulty form errors, search volume history loading, and the announcements Create button.
- Fixed Table Copy and CSV exports now include values that load after the page (like assigned users), use full names instead of initials, and leave out the Actions column. The Copy confirmation follows dark and light mode.
- Fixed Analytics dashboard: Top organic queries loads again (expired Search Console logins are refreshed) and says why when there is no data. All queries opens Search Console for the same project.
- Fixed Analytics reports: clicking Generate more than once no longer creates duplicates; an existing report for the same dates opens instead.
- Fixed Analytics reports: long titles no longer run under the action buttons, the date range is readable on phones, and deleting a report removes it straight away.
- Fixed Alert history shows the change as a percentage (+12.5%, -8%).
- Fixed Add widget shows an error under the title when it is left empty.
- Fixed Search Console: the calendar icon shows in both themes, a custom date range works without a comparison, comparison cards show the real periods instead of "Invalid Key", and Export downloads a spreadsheet of every table.
- New Reports section in the sidebar: every client report in one place, and each one can be saved and shared to the client portal (clients find them under Shared Reports).
- New Competitor movement report: who overtook you this week, new sites in the top 10, and the competitors gaining the most share of voice. Built from the daily rank checks, no extra API cost.
- New Page report: pick any ranking page to see its keywords, Search Console clicks and searches, Analytics visits and conversions, and other pages it competes with.
- New Estimated traffic value: what your rankings would cost as Google Ads clicks each month, the most valuable keywords, and the upside of reaching the top 3. Also added to performance reports.
- New Location coverage grid: services against cities with the best position in each, for clients that serve several areas.
- New Content decay report: pages whose Google clicks have fallen steadily over 90 days, ranked by clicks lost, with the likely reason.
- New Location check: flags keywords that name a city but are tracked for the whole country (or another city), with a one-click move to the right city. The keyword report shows an alert when any are found.
- Improved Estimated traffic value now appears in performance reports, with a tile, a top-keywords table and a highlight when it moves.
- Fixed Report dropdowns are readable in dark and light mode, and project names with an apostrophe or "&" no longer show codes like ' or &.
- Improved URL cannibalization is stricter: a page only counts as competing when it reached the top 20 on at least two checks in the window, and swaps are counted between those pages only. Pages that ranked once or only deep in the results are left out (the card says how many), verified pins are excluded, and the Excel export gains a Days in top 20 column and states the rule.
- New Performance reports: pick a client project and compare month over month, quarter over quarter, year over year (a month, a quarter or a full year) or any two custom ranges. The report shows where every keyword ranked at the end of each period with climbers and drops, Google Search Console clicks, impressions and top searches, Analytics visits, channels, landing pages and conversions, Bing traffic and Google Ads, with a plain-English summary of wins and things to watch. Save it, add a note, print it to PDF, and share it to the client's portal under Performance Reports.
- New URL cannibalization: an Excel button exports the report for the selected 30 or 90 day window, with a Summary sheet, one row per affected keyword, one row per competing page (best position, days ranking, first and last seen, which page shows now) and the daily page Google showed. Page URLs are clickable. Available in the app and the client portal.
- New Bing Webmaster Tools: paste the API key from your Bing account under Bing Webmaster > Settings & sites, link each Bing site to its project, and the daily sync pulls clicks, impressions, top queries and top pages. A Bing performance page shows the trend with period comparison and lets you track any Bing query as a keyword; the keyword report gets a Bing card; the status page and Integration health cover the sync.
- New Verified pin quality: a page per project showing how positions pushed through the API compare with our own checks. Accept rate, average gap at push, why pins released, pushes per week, a per-source table so you know which PM-tool sources to trust, and every pin with its pinned, measured and gap values. Open it from the Verified pins button on the keyword report.
- New Keyword change log: every keyword added, deleted, favorited or restored, with who did it and when. A Recent changes card sits on the keyword report and the full log opens from the Changes button. Deleted keywords have a Restore button that re-adds them through the normal path and queues a rank check.
- Improved Keyword History chart: a forecast column projects each rank band one month ahead from its recent trend, drawn as faint bars, and a page-one trend line runs over the months with the projected segment dashed.
- Improved Partner projects open on the same keyword report as your own projects: rankings, history chart, rank distribution, share of voice, cannibalization, SERP features and keyword history, all live. A 'Shared by' tag marks the project and the add, favorite and delete controls are hidden because the keywords belong to the other agency.
- Improved Partner projects now sit in your main Keyword Projects list, after your own, tagged with the agency's name and a Partner filter. They open on the read-only partner report. The Partner accounts and partner report tables also now stack into cards on phones like every other table.
- Improved Verified rankings pushed through the API now count. An accepted pin is recorded in the ranking history for the latest check day and carried forward daily while it is active, so daily increases, history charts, rank distribution, share of voice and reports all include it. The measured position is kept alongside, and a pin withdrawn as wrong is removed from history.
- New Partner access: let another agency that uses SEO App read your keyword projects, by entering the email they sign in with. Partners see rankings only, under a new Partner accounts page with read-only reports. Your clients, portal and branding are never shown to them, and nothing about the partner appears to your clients. Either side can end the link.
- Improved v1 API: a key now reaches its own projects plus any partner agency's projects. list_projects marks each project own or partner with the agency name, and the ranking, history, SERP, push and release endpoints accept a domain instead of a project ID (the matched project is returned as matched_domain). Existing calls keep working unchanged.
- New Google Ads: a Settings & Connect page where each account enters its own developer token, manager account ID and OAuth client, with the Google Cloud steps and the redirect URI to copy. Connect, reconnect and disconnect from the same page.
- Fixed Google Ads connections no longer depend on credentials built into the app, so any account can connect, and failures from Google now explain what to check instead of a generic error.
- New Client portal: the AI visibility page now has the Opportunities card, read-only: who the assistants recommend instead, prompts where the brand is missing, what the real assistants cite and name, and brand mentions across AI answers.
- New Client portal: a "since your last visit" strip at the top of the dashboard shows keywords that improved or slipped, the biggest movers, and any success or gap reports published in between.
- New Keyword research: a volume vs difficulty scatter on the keyword ideas, suggestions, related keywords, keywords for site and keywords for categories results, with an easy-wins zone and chips that jump to the keyword in the table.
- New AI visibility: a Live checks chart shows, for the last eight live runs, how many prompts each assistant named you in (solid) against those it did not (faded).
- New Success report: the score card now carries a sparkline of the last compiled scores with the change since the first, so you can see whether an account is trending up.
- New Integration health: a 30-day failure timeline per connection, so a Google account that keeps rejecting access stands out before it breaks reports.
- New Client users: a 90-day sign-in activity strip per client, with active days counted, so you can see who actually opens their portal.
- New Position Trends, a new page under Position Tracking: every project as a row and the last 8, 12 or 26 weeks as columns, each cell the week's average Google position computed from the ranking history, green where it improved on the week before and red where it slipped. Filter, sort and headline tiles included.
- New URL cannibalization card on the keyword report: keywords where Google ranked more than one of your pages in the last 30 or 90 days, with each page's best position and days shown, a day-by-day strip of which page ranked, and a swap count. In the app and the client portal.
- New Share of voice now includes an Average position vs competitors chart: your site's average Google position drawn against the competitors you pick from the standings, over 14, 30 or 90 days, in the app and the client portal.
- New Rank distribution histogram on the keyword report, in the app and the client portal: keywords per position band on the latest check as solid bars, with the position 7, 30 or 90 days ago as outlined ghost bars and a change count per band.
- Fixed Light mode: dropdowns on report pages (such as the year selector) showed as a grey box with a white wedge. They are now white fields with a small chevron everywhere.
- Fixed Success report in light mode: the report cards kept their dark background while the text switched to dark ink, so it was unreadable. Cards, tiles and chips now follow the theme.
- Fixed Text across the app now uses the intended Instrument Sans font on every page. The shell asked for a font that was never loaded, so most pages fell back to the browser default and looked older than the project list.
- Improved Client users page rebuilt: avatars, the projects, analytics properties and gap reports each user can see, when they were added and last signed in, a local pack switch per user, and a one-click copy of the portal sign-in link.
- Improved The notification bell now shows each notice with an icon and color for its type (site down, back up, ranking drop, connection problem, AI visibility, report), a short excerpt, an unread count and a Mark all read link.
- Improved AI visibility: the mention cards and the tracked-prompts table now use the real answers from a live check when one exists, in the app and in the client portal. A green dot marks positions that came from a live answer.
- New AI visibility: a Run live check button on each LLM report asks the real ChatGPT, Claude, Gemini and Perplexity your tracked prompts through DataForSEO, with per-assistant progress and a summary of where you were named.
- New AI visibility: brand mentions across AI answers, showing how often each assistant mentions the brand, the sites those answers draw on and how the brand is referred to. Cached for a week with a refresh button.
- Improved AI visibility: the live citations block now covers every assistant that has been asked live, with a named-in count per assistant, and the keyword detail page shows what each real assistant said.
- New Live ChatGPT answers in AI visibility. Once a week each tracked prompt is also asked in the real ChatGPT (through DataForSEO), asked as a customer in your service area. The report shows what it actually cited, which local businesses it named, where it named you, and the full answer on each prompt's page. Switch it per project under Edit project.
- Improved AI visibility opportunities now show the monthly AI search volume beside prompts you are missing from, so the biggest gaps come first.
- Improved AI visibility checks ask the assistants the way a customer would. Give a project a service area, brand names and a one-line description (Edit project) and each prompt is asked as a local customer, up to ten recommendations are captured, and a mention counts when the assistant names the business even without linking the site. Replies wrapped in code fences no longer fail the check.
- New AI visibility report: an Opportunities section showing who the assistants recommend instead of you (with how often and on which models), the prompts where you are missing and who was picked, near misses, per-model coverage, and tips on what to fix.
- New Client portal dashboard shows the latest monthly consolidated report for each project: users, organic clicks, keywords in the top 10 and average position with month-on-month changes, the executive summary, and a link to the full report.
- Improved Notifications page rebuilt as a feed: grouped by day, filter chips per type, search, Mark all as read, Load older, and the notification settings beside it. Several account tables that loaded empty on the new design (notifications, payments, activity log) load again.
- New Notifications for real events. The bell now tells you when a project loses page-one keywords or slips clearly in a day, when a monitored site goes down and comes back, when Google Analytics or Search Console rejects our access, and when an AI visibility check has finished. Each one opens the right page. Switch types on or off under Notifications.
- New Integration health page (Account menu). Every Google Analytics property, Search Console site and the Google Ads connection on your account, when each was last used, anything that needs reconnecting, and a one-click check.
- Fixed Google token refresh errors were printed into page responses; they are now logged and reported as a notification instead.
- Improved The top-bar search (⌘K) now also finds client portal users, keyword research and domain comparison reports, backlink reports and site audits. Admins can jump to an account or sign in as it from the results.
- New Saved views. Tables remember your search, sort and rows per page; Search Console remembers the date range and chart metrics; the analytics dashboard remembers its range and AI visibility its period. Saved on your account, so it follows you between devices.
- New Share a domain comparison with a client. On any comparison report, Share with client picks the portal users who should see it, with an optional note. It appears on their portal dashboard with the win split and under Gap analysis.
- Fixed Client portal: a comparison report can now only be opened by clients it was shared with or whose project it belongs to.
- Improved Light mode now reaches every page: form fields, menus, pop-ups and date pickers follow the theme, and chart text, grids and tooltips switch with it instantly.
- New Light mode. Pick Dark, Light or Auto (follows your device) from the account menu in the top bar. The choice is remembered on your account.
- Improved Every data table now has Copy and CSV export, a search box, a rows-per-page selector and the same pagination. On phones, rows turn into cards with the column name next to each value.
- Improved List pages (competitors, keyword mapping, project reports, backlinks, uptime logs and more) can now be filtered by typing, sorted by clicking a column heading, and exported to CSV.
- Fixed The AI-written backlinks summary never loaded. It now writes the summary and shows the key numbers next to it.
- Fixed Backlinks list: the report type badges showed as raw code.
- Fixed Paid ads report: search term click counts are formatted with thousands separators.
- Improved Search Console performance report: clicks and impressions now show with thousands separators everywhere, and the trend chart has been restyled with one axis per metric, real dates in the tooltip and theme colors.
- Fixed Icons that had gone missing on several pages (uptime monitors, domain and DNS views, audit data, social proof campaigns, the keyword report actions) are back, and confirmation prompts on the ported pages work again.
- Improved Search Console performance report redesigned: property and search type in the header, a segmented date range bar, metric cards that double as chart toggles, and a tabbed queries/pages/countries/devices table in one card. The broken Back link is fixed.
- Fixed Rapid Indexer works on phones: the balance check moved into the page header and the projects table becomes stacked cards.
- New Admins see a platform overview at the top of the dashboard: active and new users, who is online, projects and keywords tracked, subscriptions and today's rank checks, plus a user search with one-click sign-in-as and the latest sign-ins. While signed in as a user, the top bar shows a Return to admin link.
- Fixed LLM projects list now shows as cards on phones; wide tables such as Analytics alerts scroll sideways inside their card instead of being cut off.
- Improved LLM project report redesigned: mention tiles per model, visibility timeline with a summary and competitor comparison beside it, and a cleaner prompts table showing each model's position and change in one cell.
- Improved Domain intersection report rebuilt: summary tiles for shared keywords and who ranks higher, a sortable table with difficulty and winner per keyword, and a side panel comparing both ranking pages and their backlinks for the selected keyword.
- Improved Analytics dashboard: placeholder text and demo markers are gone, the pages list matches the dark theme, the live counter refreshes every minute, you can switch Google accounts from the header, and leaving the page no longer waits for the Google data calls to finish.
- Improved Faster pages: the app does far less repeated database work on every request, and background jobs batch their writes and use less memory.
- Fixed Scheduled jobs: GA4 organic trends now run for every range (7, 30, 90 days and a year), the Search Console summary uses the current period instead of a fixed one, the daily analytics email only picks up today's reports, and the rank-provider outage alert can fire again.
- Improved The avatar in the top bar now opens an account menu: profile, password, billing, notifications, activity log and sign out.
- Improved You stay signed in for 24 hours of inactivity instead of two. When a session does expire you land on the sign-in page with a note, and after signing in you return to the page you were on. "Remember me" still keeps you signed in for a year.
- New Public status page at seoapp.io/status: live health of rank checks, local pack, AI visibility, Search Console and Analytics syncs, reports, monitoring and billing, a 30-day history per component, incident updates and a JSON feed.
- Improved Status page shows the day's keyword rank checks: how many ran, the share that returned a result, still running or failed, split by Google organic and local pack, plus every other scheduled job with its last run. A high failure rate now marks the component degraded or down and opens an incident by itself.
- New Admin system status board: every scheduled job with its last run, duration and failure message, automatic incidents when a job stops running, an email alert when that happens and when it recovers, and a form to post incident updates to the public page.
- New "What's new" button in the top bar with a dot when a release has shipped since you last looked, showing the latest changes without leaving the page.
- Improved The error log only records real failures now; routine progress notes moved to the info level, so the admin "errors today" count means something.
- Improved Every email we send (reports, uptime and DNS alerts, domain and certificate expiry, trial reminders, account emails) uses one shared design with your agency logo and a clear call to action.
- Improved Phone layouts for the dashboard, the success report pages, the research tools and the social proof settings: stacked actions, two-column stat tiles, wrapping rows and tables that scroll inside their card.
- Improved New dashboard: stat tiles for projects, keywords on page one, projects improving or slipping today and uptime, a set-up checklist, visibility drops, ascend and plunge cards, a cleaner projects table and the winning campaigns list.
- Improved Every data table now shares one look: search, page size, pagination and export buttons match the rest of the app.
- Improved All nine keyword research tools (keyword ideas, suggestions, related and ranked keywords, keywords for site, domain overview, SERP competitors, bulk difficulty, keywords by category) use the new design.
- Improved Technical audit, competitor report, SERP comparison, on-page results, keyword history, clients, AI token upgrade and the remaining AI visibility pages use the new design.
- Improved Admin pages (tickets, contact forms, permissions, payments, documentation, settings, monitors, coupons, affiliate program) use the same design as the rest of the app.
- Improved Social proof notification settings: one tab row, the form beside a live preview that updates as you type, compact color pickers and a save bar that stays in view.
- Fixed Dashboard showed a blank page for a short time after a release. Fixed the same day.
- New Client reports end with a "Prepared by" card: your logo, name, a line about your agency, website, email and phone, set under Agency > Profile.
- Improved Front end finished: the FAQ, documentation, blog post and 404 pages moved onto the new theme; the five original feature pages (keyword tracking, technical audits, white label, automation, competitor analysis) now run on the same template as the newer pages with screenshots, comparison tables, structured data and related links; blog posts and all marketing pages are in /sitemap-pages.xml.
- New Case studies at /case-studies, starting with Grand Affair Party Rentals: the numbers from their own reports, the approach, the actual screenshots and the tools behind it.
- Improved Faster pages: stylesheets and scripts are now cached between releases instead of refetched on every visit, and fonts load from one link in the page head with display swap instead of a blocking import inside each stylesheet.
- New A set-up checklist on an empty dashboard: add a project, connect Search Console and Analytics, invite a client, schedule a report. It hides itself once everything is done.
- Improved The legacy AI keyword report (Project report, Report view and its email) is retired. Old links open the success report, which does the same job from every data source and publishes to the client dashboard.
- Improved The header search works now. Type two letters and it searches everything you own: projects, tracked keywords (straight to the keyword history), success reports, AI visibility projects, GA4 properties, uptime monitors, Google Ads campaigns and every page in the menu, with keyboard navigation and Cmd/Ctrl K or / to focus it from anywhere. The success report list has its own search box that works together with the tabs.
- Improved Success report rebuilt. The list now scores every project on the keywords that improved or held the top 3 since the first check, and View report opens a compiled page instead of a placeholder: a success score, the wins found across rankings, local pack, AI Overviews, SERP features, share of voice, Search Console, GA4, AI assistants, Google Ads, uptime and backlinks, an agency-only watch list, a 30-day, 90-day or all-time range, and an AI-written note to the client you can edit. Publish to client puts the exact report on the client's dashboard (a card at the top with the score and top wins) and on a Success Report page in their portal, looking the same as it does for you. Remove it from the dashboard at any time.
- New Social proof strip on the homepage, the feature landing pages and the comparison pages: rating, the agencies and products built on SEO App, and customer quotes.
- New Comparison pages at /compare: SEO App vs Semrush, Ahrefs, Moz Pro, SE Ranking, AccuRanker, BrightLocal and AgencyAnalytics, each with a head-to-head card, a feature table marking who wins each row, where the other tool is the better pick, screenshots, a verdict and FAQs. The header Compare link now opens the hub, and the pages are in the sitemap.
- New Ten new SEO landing pages on seoapp.io (agency rank tracker, local SEO, AI visibility, SERP features, share of voice, client reporting, Google Ads reporting, uptime and DNS monitoring, API and webhooks, keyword gap analysis) built from one config file and one template, with FAQ and breadcrumb structured data, related-page links, footer links and a /sitemap-pages.xml listed in robots.txt.
- Improved Homepage and the new SEO landing pages now show real product screenshots (keyword report, client portal, local rank heat map, keyword table, keyword history) with a click-to-enlarge view. Each landing page gained a who-it-is-for section, a stats band, a usual-way versus SEO App comparison table, a three-part deep dive and more FAQs.
- Improved Keyword ranking progress report email redesigned: at-a-glance tiles (keywords tracked, page 1, top 3, AI Overviews, moved up/down, newly ranking), biggest gains and keywords needing attention, a color-coded table of every ranking keyword with Google, AI Overview and local pack positions, the agency's logo, a button to the full report and the client dashboard link. Keywords entering or leaving show "new" and "lost" instead of odd numbers.
- Improved Client portal: the LLM keyword tracking page and the LLM keyword detail page are rebuilt on the new design: mention tiles per engine, visibility timeline, a summary of mentions found / ranked first / improved / declined, the keyword history chart, a sortable keyword table with new/lost chips, and engine tabs on the detail page with your pages highlighted in each AI answer.
- Improved Client portal: social proof statistics (tiles, impression/hover charts, top pages, collected data with expandable details) and the gap analysis detail (who leads, shared keyword table with gap, keyword difficulty ring, search volume history and both sites' ranking pages and backlinks) are rebuilt on the new design. Every portal page now uses the new shell.
- Fixed Keyword history: a day's position is now the best ranked check that day (an unranked check no longer counts as the day's minimum), "since first check" compares with the first check that ranked, and the date range links no longer break on keywords with spaces.
- Improved Sidebar reorganized: 14 flat application groups become six sections by task (Overview, Rankings & keywords, AI visibility, Traffic & ads, Content, Technical & monitoring) plus Clients, Account and Administration. The section holding the current page opens itself, your open/closed choices are remembered, a "Find a page" box filters the menu as you type, duplicates and the legacy Google Ads templates are out of the menu, and "Domains" is now "Projects".
- Improved Client portal: the Google Analytics pages (dashboard, channels, audience, pages, organic & devices, traffic sources, widgets and the generated report view) are rebuilt on the new design: metric cards you click to switch the charts, a date range picker, dark-theme charts, and the report view now shows the same tiles, highlights and channel table as the report email.
- Improved GA4 daily, weekly and monthly report emails redesigned: at-a-glance tiles with change chips, plain-English highlights (top channel, biggest riser and faller, key events), a channel table with share bars, a key events table with the best channel per event, the agency's logo and a button into the client portal. Replaces the old raw metrics grid.
- New Analytics → Reports: generate a daily, weekly or monthly report for any site on demand (same data the schedule would pull). Newest reports are listed first, and hand-made reports are never emailed automatically.
- New Analytics → Reports: type an email address in the page head and click the envelope on any report row to send that report as a test email, exactly as the client receives it.
- New Google Ads → Performance Report: pick any mix of accounts and campaigns and see them combined (plus per-campaign), with a comparison period of your choice: previous period, previous period matched by day of week, same period last year, or a custom range.
- New Client portal: a Paid Ads page with the same report (read-only, limited to the client's own campaigns) and a Google Ads tile on the dashboard showing spend, clicks, conversions and cost per conversion for the last 30 days against the 30 before.
- New Paid ads report: a Conversions by type table (calls, form submissions, purchases and every other conversion action) with primary and secondary counts, value, share and change, plus a conversion-types column in the campaign breakdown. Secondary actions are shown even though Google leaves them out of the headline Conversions number.
- New Paid ads: daily trend chart (spend, clicks, conversions, impressions, CPC, cost per conversion or CTR) with the comparison period as a dashed line.
- New Paid ads: scheduled weekly or monthly email per account, sent to the client portal users and any extra addresses, with key metrics, conversions by type, campaigns and top searches, and a link to the portal. Send yourself a test from the report page.
- New Paid ads: budget pacing per campaign for the current month: daily budget, spend to date against what was expected by now, projected month end and an on/under/over pace flag.
- New Paid ads: enter what a conversion is worth (a call, a form lead) and the report shows estimated revenue and ROAS everywhere, including in the client portal, where Google has no conversion value.
- New Paid ads: device and location breakdowns (share of spend by device; clicks, cost and conversions by city or region).
- Improved Campaign breakdown can switch to an ad-group breakdown; every table sorts by any metric; a metric chooser per section adds or removes columns and remembers your choice.
- Improved Keyword performance tags keywords and search terms as brand or non-brand. Move a term with one click or add brand / non-brand rules (contains or exact); campaigns named "brand" count as brand by default.
- Improved Cost metrics (spend, CPC, cost per conversion) use reversed color coding: a drop shows green.
- Improved Google Ads menu and pages say "accounts" for SEOApp projects and keep "campaigns" for Google's campaigns; the linked list sorts by account, customer, campaign or status.
- New Client portal sign-in: "Forgot your password?" now emails the client a one-time 6-digit sign-in code (valid 15 minutes, single use). They sign straight in and are invited to set a new password, so nobody has to resend login details by hand.
- Fixed Client portal sign-in no longer accepts a hard-coded fallback password; only the client's own password or an emailed code signs them in.
- Improved Client portal dashboard tiles: a color per report type, a headline number and a green/amber/red status chip (ping speed, DNS changes, domain and SSL expiry).
- Improved Client portal: the account manager is now front and center. A large card at the top of the dashboard shows who to contact with a one-click email, team reports and report history, and a smaller card sits in the sidebar on every portal page.
- New Client portal: approvals waiting in PeakKR raise an alert on every portal page (plus a badge on Team Reports), not only on the dashboard, so a client cannot miss a decision the team is waiting on.
- Improved Client portal dashboard redesigned: a headline card per project (keywords tracked, top 3 and page 1 with change since the last check, rank distribution, best rankings and biggest climbers), approvals and team reports next, and every shared SEOApp report or tool as one compact tile grid instead of a tall column of single cards.
- Improved Each agency connects its own PeakKR workspace: My profile → Integrations → PeakKR reports. Paste the token, see the connection status, and your clients get their team reports on the next portal visit. Changing the token re-matches projects.
- New Client portal: reports from your SEO team. When the PeakKR API token is set (Admin → SEO tools settings), each client's dashboard opens with any approvals waiting for them, the latest reports shared by the team (GBP audits, AI visibility audits, site audits, on-page docs, success stories, local map grids and work reports) opened via their white-label pages, a Google Search traffic tile, the account manager's contact and a link to the full report history. A new Team Reports page lists everything with a filter by type.
- Improved Clients are matched to PeakKR projects by domain once and the key is stored; data is cached for an hour and only ever requested in client mode, so nothing internal can reach a client screen.
- Fixed Client portal: the Data Studio report page opens the Looker report full-height with Monthly / Quarterly / Yearly switches and an open-full-screen button; the SEO Detect and Dash Directory embeds are gone. Links in the rebuilt portal tables use the theme colors instead of browser blue.
- Fixed Share of voice and SERP features cards: inner padding, a readable highlight for your own domain on agency-branded portals (light accents no longer wash out the text), larger share numbers and clearer bars.
- Fixed Client dashboard polish: the project card no longer washes out on light agency accents, the four stat tiles stand out as boxes, rank distribution legend and best-ranking rows have proper spacing, and the account name in the top bar uses the theme color.
- Improved Client portal menu only lists what the client has: LLM projects, Analytics, GA4 reports, uptime, DNS, domains, gap analysis, social proof, Data Studio, files and announcements disappear when there is nothing behind them, and empty sections are hidden.
- Fixed Client portal: a 500 error on every page once PeakKR was connected (the shell looked up models the wrong way inside the view). The agency logo from agency settings now shows in the portal sidebar reliably, with the name as fallback only if the image fails to load.
- Fixed Keyword report: the row-select and select-all checkboxes in the rankings table use the dark theme styling.
- New SERP features: a new card on the keyword report (main app and client portal) shows which features appear for your keywords (featured snippets, People also ask, video, local pack, AI Overview, top stories, shopping, ads and more), how many of them you hold, and which domains hold the rest. Click a feature for the keyword-by-keyword list. Owners are recorded from the next ranking check onward.
- New Competitor keyword discovery: every competitor on the Share of voice card has a Keywords button that lists the keywords they rank for in the top 30 that you do not track yet, with volume, CPC, difficulty, intent and their ranking page. Tick the ones you want and add them straight into the project. Lookups are cached for 30 days per competitor and cost audit tokens like the keyword research tools.
- New Dashboard: a Portfolio panel lists every project with keywords, top 3 and page 1 counts (with change since the previous check), share of voice, last check, when the client last opened the portal, and signals such as “12 keywords left page 1”, “Share of voice down 3 pts”, “No check for 4 days” or “Client not seen in 40 days”. Filter by at risk / improving / steady and sort any column.
- New API v2: outbound webhooks. Register a URL and SEOApp posts a signed project.checked event after every ranking check with the summary, movements, best keywords and share of voice. Also new: GET /portfolio, GET /projects/{id}/serp-features/ownership and GET /projects/{id}/competitors/{domain}/keywords. Built for PeakKR, usable by any tool.
- Fixed Client portal: the Share of voice and SERP features cards now load (their endpoints were missing from the portal's route list), and the keyword finder's volume lookup is routed too. Checkboxes in the competitor keyword list use the dark theme styling.
- New API v2: GET /stats returns the agency's headline numbers (keywords on page 1, at #1, in the top 3, movement since the last check, monthly searches and estimated clicks you capture, AI Overview citations, local pack wins, SERP features held, share of voice, lifetime #1s, monitors up) plus a keyless GET /stats/embed/{token} with CORS for live counters on your own website. GET /projects/{id}/stats gives the same per project.
- Fixed Dashboard: the new Portfolio panel could hold up every other widget on large accounts. It now uses cheap range lookups, is cached for 10 minutes, and no longer holds the session lock while it builds, so the rest of the dashboard loads independently.
- Improved Client portal: Google Analytics properties, the GA4 reporting hub and generated reports, LLM projects, social proof campaigns and notifications, Data Studio reports (list and report view), gap analysis, topics & keywords, the keyword finder, the competitor visibility report and the Looker Studio page now use the same dark design, cards and tables as the keyword report.
- Improved Client portal: the AI visibility pages (overview, visibility score, cited pages, citation detail, mention analysis, monthly report and AI answers vs Google) and the blog post pages (posts with tracked keywords, post rankings, keyword history) are rebuilt in the same style, with engine chips, rank chips and change pills instead of the old badges.
- Fixed Client portal keyword finder: the search-volume and CPC lookup was calling an endpoint that expected a project id and never filled in. It now resolves per keyword again.
- Improved The five largest controllers (cron jobs, main app, client portal, data queries and webhooks, together over 60,000 lines) are now split into 29 focused trait files grouped by feature: billing, projects, keyword research, SERP sensor, reports, GA4, monitoring, LLM, payments and so on. Routes and behavior are unchanged; nine superseded “_old” methods that nothing linked to were removed.
- Improved A keyword that ranked on the first two pages and is then missing from a single check no longer shows as a drop to “Not in top 100”. The keyword report keeps the last known position with a small “?” marker (hover it for details) and the charts and distribution stay stable. A drop is only shown when two checks in a row miss the keyword. Applies to the main keyword report, the client portal and the API (`unconfirmed` flag on each ranking row).
- New Share of voice: every keyword report (main app and client portal) now has a competitors card below the rankings table. It shows which domains own the search results for your tracked keywords, weighted by position and search volume, your site's share and rank among them, a 14 / 30 / 90-day trend, and the exact keywords where a competitor took your spot since the previous check, or where you took theirs.
- New API v2: GET /projects/{id}/share-of-voice returns the same standings, trend and lost / won spots for your own dashboards.
- Improved Share of voice is snapshotted on every ranking check, so the trend builds up from today even though raw search results are only kept for two days.
- Improved Every ranking, history, report and cron query that used to splice keyword, domain, date and URL values straight into SQL now passes them as bound parameters. 141 queries across the app, the client portal, the API and the cron jobs were converted, and the social-proof and scheduler filters now escape their inputs. No behavior change, just a closed door.
- New Projects list: a Table / Cards switch in the toolbar. The table now shows each site's favicon; Cards gives every project a preview card with cover, highlight numbers, rank distribution, best rankings and biggest climbers since the last check. Your choice is remembered on that device.
- Improved Keyword tracking page: the SERP sensor, backlink audit, client login and insights panels now sit below the keywords table under an Agency insights heading, so the charts and table load higher. The highest-visibility keyword is called out in the table toolbar.
- Improved The “ranking checks temporarily affected” pop-up no longer interrupts the ranking page and combined reports. Client users see it as a dismissible notice at the top of the portal and on the sign-in page instead.
- New The client portal (agency_user) now uses the same dark design as the main app: sidebar, top bar, mobile drawer and the agency logo in the corner. Agencies without a logo file see their agency name instead of a broken image.
- Improved Agency branding in the client portal: the agency logo sits in the sidebar and the agency's brand color replaces the gold accent (active menu item, buttons, chips) when it reads well on the dark theme; greys and near-white colors fall back to gold. Blog topics no longer appear on the client dashboard.
- Improved Portal monitoring pages rebuilt in the keyword-report style: server uptime list and monitor page (stat cards, response-time chart, latest checks, incidents, checking locations), check history and single-check pages, DNS monitor list, record view with change history, domain names list with expiry chips, plus announcements, project files and change password.
- Improved Portal heatmap now uses the same map as the main app: dark map with heat glow, keyword list with filter and Maps / Organic / Both layers, detail card, and stat cards. Blogs & Topics is gone from the client sidebar.
- Improved Portal domain name page rebuilt: domain and status in the title, last check and total checks under it, then two cards for registration (with days-left chip, registrar and nameserver chips) and the SSL certificate. Stat widgets on the other monitoring pages are now one compact row each and go full width on phones.
- Improved Every other client portal page (server uptime, DNS, domain names, analytics, GA4 reports, LLM projects, social proof, blog topics, files, announcements, heatmap, change password) now sits inside the same dark shell, with its cards, tables, buttons, forms, charts and dialogs restyled to match.
- Improved Portal dashboard: everything shared with a client is grouped by report type as cards with Open and Report buttons, instead of one plain table.
- Improved Portal keyword report rebuilt to match the main ranking page: stat cards, the Share / Count keyword history chart, rank distribution with AI Overview and Local Pack top 3, the Google Maps strip, position chips, SERP feature chips with a click popover, spreadsheet export and the date comparison.
- Improved Portal keyword history page rebuilt: keyword headline, best-ever and since-first-check stats, position chart with top 3 and page 1 bands, quick ranges, and ranking history plus top results tables.
- Improved Portal projects page is now a preview of each project: a cover with the site's favicon and domain, keyword count, average position and change, top 3 and page 1 counts, AI Overview and local pack counts, a rank distribution bar, best rankings and biggest climbers since the last check, with a Today / Yesterday / 7D / Month / All range for the change.
- Improved Keyword history page rebuilt: the keyword as the title with domain, location and device under it; stat cards for current position, best ever, change since first check, volume, CPC and difficulty; a position-over-time chart with top 3 and page 1 bands and quick 7d / 30d / 90d ranges; a ranking history table with per-check change; and a top results table with your page highlighted.
- Improved Projects list opens sorted by the biggest position gain for the selected range, with the sorted column marked in gold. Columns where more is better now open descending on first click.
- Improved Keyword history chart rebuilt: rounded stacked bars showing each band's share of the month (switch to raw counts with one click), the same colors as the rank distribution, a clickable legend, no empty future months, and a tooltip with counts, shares and the monthly total. The rank distribution below it is now one solid bar in the same colors, with new rows for the share of keywords in AI Overview and, when enabled, in the Local Pack top 3.
- Improved The keyword table opens sorted by best position, with keywords outside the top 100 at the bottom. Your own column sort is still remembered.
- Improved Add keywords form: a full-width, four-line keyword box with a live keyword count, one keyword per line or comma separated, and the location, device and save controls lined up beneath it.
- Improved Keyword tracking header: a small Dashboard / Projects breadcrumb replaces the Projects and Go Back buttons, leaving one quiet Heatmap link and the gold Add keywords button.
- Improved Add keywords is a gold button in the page header; the form itself stays collapsed until you need it.
- New Mobile navigation: on phones and small screens the sidebar now opens as a drawer from the menu button in the top bar.
- Fixed The notification bell in the top bar now opens a panel with your latest notifications and links to the full list. The red dot only shows when there is something new.
- New This changelog page, so you can see what changed and when.
- Fixed Changelog page text now appears on every device.
- Fixed On phones the page title and header buttons no longer show through the open navigation drawer; the notification panel also sits above page headers now.
- Improved Dark map that matches the app, with a keyword panel, filter, and a toggle between Google Maps rank, organic rank, or both.
- New Heat glow drawn from your keyword locations, color-coded by rank band, plus a tracked-location pin with a reference radius.
- New Stats strip: keywords on the map, how many are in the local 3-pack, average Maps rank and average organic rank.
- Improved Clicking a keyword or pin opens a detail card on the map instead of a white pop-up; hovering a keyword highlights its pin.
- Improved Rank distribution card beside the keyword history chart replaces the six colored percentage boxes.
- Improved Google Local Map condensed into one line: keywords in the local 3-pack, band counts and a monthly sparkline.
- Improved Cleaner table: tabular position numbers, small up/down change chips, clearer column names, SERP features as a count you can click to see the list, and an 'Export to spreadsheet' button.
- Improved Visibility, keyword mapping, position tracking and analytics insights are collapsed by default so the page is shorter.
- Fixed Tooltips on chips, badges and the sparkline now appear immediately on hover.
- New Verified ranking pins: an external tool can push a position it verified for a keyword. The tracker shows it with a 'verified' mark while the measured history keeps recording underneath, and releases it automatically once the regular check catches up, after two near-misses, or after 14 days.
- New API v2 at /api/v2 with per-user API keys, pagination, rate limits, and endpoints for projects, keywords, current rankings, ranking history, changes between two dates, stored SERPs, SERP features, AI Overview, Google Maps ranks, verified pins and a one-call export (JSON or CSV).
- Improved The local map chart now includes the top 3 and 4-10 bands, which were computed but never shown.
Have a question about an update? Contact us. Machine-readable version: changelog.json.