Skip to main content
Every engine and place

Track keywords on every search engine, in any place

  • Six search engines. Tracked keywords can be checked on Google, Bing, Yahoo, Baidu, Naver and Seznam. Before, Bing and Yahoo could be chosen, but every check ran on Google. Each engine’s keywords are now checked on that engine, with their own history. See Tracked keywords.
  • Any location. Track a keyword in any country, region, city, district or postal code the engine searches from. That’s all 240 countries and territories DataForSEO lists (Taiwan, Hong Kong and Puerto Rico included) and about 270,000 places for Google, up from 187 countries and a handful of cities. Type to search, for example austin, texas or 10001.
  • Every language. About 130 languages, up from 65. The list is the engine’s own.
  • Default search engine. A project’s rank tracking engine is the one new keywords start on. See Add a project.
  • Only what DataForSEO takes. Keyword research defaults (Project Settings) are the country-and-language pairs research covers — South Africa in English, Brazil in pt. Search volume is asked only in Google Ads’ 46 languages; a keyword in another is tracked with no volume. AI visibility asks Google AI Mode only in its own languages, and Claude only from its 36 countries.
  • Checked before it’s saved. A location or language the engine doesn’t search from is refused with a message, instead of a check that fails every day.
  • API and MCP. New: GET /v1/reference/locations, GET /v1/reference/locations/lookup and GET /v1/reference/languages, and the MCP tools find_location and list_search_languages. search_engine is validated on POST …/tracking/keywords and project creation. Projects return search_engine, their default engine.
First checks

New keywords and topics get checked straight away

  • Tracked keywords get a first rank check of their own when you add them, instead of waiting for the next scheduled check. Positions land within about 20 minutes; search volume fills in with the next scheduled check. See Add tracked keywords.
  • AI visibility topics get a first snapshot from all six engines when you add them, instead of waiting up to a week. It’s covered by your plan’s AI prompts. See Add prompts.
  • Local SEO keywords — the first check now searches only the keywords you added, not every keyword at the location again.
  • Fixed: adding an AI visibility topic that was tracked in another location or language was skipped as a duplicate. It’s now added as its own topic.
  • Fixed: a keyword that ranked on its first check sent a “rank improved” alert. First checks don’t alert — there’s no earlier position to compare.
  • Fixed: two people adding the same keyword at the same moment could make one of their lists fail. The duplicate is now skipped.
Schedule run history

When your schedules ran, and when they run next

Project Settings → Schedules now shows, for each recurring job, when it runs next and how its last run went: status, when, whether its schedule or someone started it, and how long it took. A failed run says why. A schedule that is overdue, or that was skipped because the organization had no active plan, says so. See Schedules.
  • Runs opens a run history for each job — or all four — ten runs at a time.
  • API. New: GET /v1/projects/{projectId}/schedules for where each schedule stands, and GET /v1/projects/{projectId}/schedules/runs for the run history, paged, with an optional job_type.
Faster pages

Pages load what they show

Large lists now come from the server one page at a time, and detail loads when you open it, so busy projects open faster.
  • Backlinks. Overview loads only the summary. Backlinks, Referring Domains, Anchor Text and New & Lost each load, search and page their own list.
  • Site audit detail. Duplicate Content and Resources load when you open their tab, one page at a time. An audit compared against another now counts every issue, however many there are.
  • Local SEO. A keyword’s full map pack loads when you expand its row.
  • Keyword research and backlink gap. A job’s keywords and a gap’s referring domains load a page at a time and are searched on the server. The summary cards above research results cover every result, worked out on the server.
  • Tracking comparison and Google AI Overviews. Keywords are searched and paged on the server.
  • AI search pages. A past run’s answers load when you open it.
API. New paged endpoints for the backlink lists: GET /v1/projects/{projectId}/backlinks/links (with dofollow_only), …/backlinks/referring-domains, …/backlinks/anchors and …/backlinks/new-lost (with mode=new|lost). Each takes page, per_page (up to 100) and search; meta.available is false before the first analysis finishes, and meta.missing is true when an analysis finished without that list. GET …/backlinks/profile and GET …/backlinks/profile/{profileId} now return the summary only, without the lists.
  • …/audits/{auditId}/duplicate-content, …/audits/{auditId}/resources, …/tracking/competitors and …/tracking/ai-overview-keywords are paged, with total in meta. ai-overview-keywords still accepts limit as an alias for per_page.
  • The AI search history (GET …/ai-search) no longer includes each run’s results; fetch one run by its id for those.
  • Research jobs no longer include their results, in the list or one at a time. New: GET …/keywords/research/{jobId}/results, paged with page, per_page and search, with meta.summary (count, and average volume, difficulty and CPC over every result).
  • Gap analyses (GET …/backlinks/gap and …/backlinks/gap/{gapId}) no longer include their rows; they carry result_count instead. New: GET …/backlinks/gap/{gapId}/results, paged the same way.
MCP. get_referring_domains, get_backlinks_list, get_anchor_texts, get_new_lost_backlinks, get_duplicate_content, get_broken_resources and get_competitor_comparison take page, per_page and search, and so does get_backlink_gap_result. get_backlink_gap answers with the first 25 referring domains and the total. get_geo_topic_detail returns sources and answers for the newest snapshot only; older snapshots keep their numbers. See MCP tools.
MCP tools

MCP: 97 tools, and tighter checks on the ones that spend

  • New: get_backlink_gap_result reads a gap analysis already started, free. When get_backlink_gap times out, collect the result with it — calling get_backlink_gap again buys another analysis. get_backlink_gap now always compares your project’s own site; it no longer takes a target_domain.
  • Domain tools are the organization’s. get_domain_overview, get_domain_top_keywords, get_domain_top_pages and get_domain_competitors take an optional organization instead of a project_id, so they work while your only project is the sample.
  • start_site_audit and trigger_web_vitals_check take a full URL, and default to the project’s home page when none is given.
  • get_local_rankings returns the latest check’s pack by default; latest_only: false gives the history, own_only: true only your listing.
  • Counts are what happened. remove_tracked_keywords, delete_saved_keywords and remove_geo_topics report how many were actually removed, not how many ids were sent.
  • Inputs match the API. Ids must be valid ids, and keywords, tags, content text and Trends date ranges are checked and trimmed the same way the API checks them — so the same question isn’t bought twice for a stray space.
  • Local SEO, managed from MCP. New update_local_location changes a location’s name, grid or listing; update_local_keyword pauses or resumes a keyword; remove_local_keywords removes keywords and their history. A grid’s spacing is now 0.5, 1, 2 or 5 km — the dashboard’s choices — over the API and MCP too.
  • Audits and web vitals checks are of the project’s own site — its domain or a subdomain — in the dashboard, the API and MCP. Other sites are refused.
  • Finding a Google Business listing needs an active plan, and isn’t available on the sample project. It still doesn’t use an allowance.
  • Rate limited per person, like the API.
Inbox and channels

Your own inbox, and your own email switch

Notifications are now Inbox, and every member has their own. Reading, selecting or deleting a notification changes it for you and nobody else. See Inbox.
  • Search, filter and settings in the header. Filter by Unread only and by category: rankings, backlinks, site audits, AI visibility, Local SEO, web vitals or reports.
  • Select several at once. Hover a notification and its icon becomes a checkbox; a bar above the list marks them read or deletes them.
  • Clearer notifications. Ranking changes show each keyword’s old and new position; backlink changes show the metric before and after, with a referring-domains spike flagged as possible spam; AI visibility leads with how many topics cite you; web vitals name the page; reports link straight to the report.
  • The Inbox has moved to /<organization>/inbox. The old address still works.
Channels now splits what’s yours from what’s the team’s. See Channels.
  • Your notifications — Inbox and Email. Each member switches these for themselves. Turning Email off stops it reaching you; your teammates keep theirs.
  • Team channels — Slack and Discord. One post per notification for the organization, connected by an owner or admin.
API. Every inbox endpoint now acts for the member calling it. New: GET and PATCH /v1/organizations/{orgId}/notifications/me for your own switches, PATCH …/notifications/read and POST …/notifications/bulk-delete for several notifications at once. PUT …/notifications now configures Slack and Discord only.
Billing

Invoices in Billing, and a banner that says where your plan stands

  • Invoices are listed in Surnex — date, number, what it was for, amount and status, with View and PDF. See Invoices.
  • The plan banner changes with your plan’s state — amber for a trial or a failed payment, red when a trial has ended or a plan is cancelled — with the one action that fixes it: Choose a plan, Update payment or Keep my plan. See Manage your subscription.
  • Billing portal has moved to the top of the page.
Dashboard

A new project dashboard

The dashboard now shows each area in the chart that suits it: keyword rankings as a distribution bar, Google AI Overviews as stacked bars per check, AI citations per engine, your Local SEO grid, backlink growth with referring domains on their own axis, a link-profile donut, audit scores per audit and a site-health gauge.
  • Sections that are still collecting say so. While a job is filling a page — a rank check, an audit, a snapshot — its empty sections show the job in progress and how long it usually takes, instead of looking as if there’s no data.
  • Pages refresh when a job finishes, without reloading.
Local SEO grids

Your listing, searched from every point around it

Local SEO now tracks your Google Business listing on a grid. A Maps search gives a different answer three streets away, so each keyword is searched from every point of a grid around the listing — 3×3, 5×5 or 7×7 points, 0.5 to 5 km apart — and each point records your position and the top 3 there.
  • Locations. A location is your listing plus its grid — what plans count as local locations. Find the listing by business name and town; Surnex recognises it by its Google listing, so a business without a website tracks the same way. Searching for a listing is free.
  • Keywords at a location. Up to 10 per location, and they don’t use a location of their own. Adding keywords runs the first check straight away. Keywords can be paused, resumed or removed; they can’t be edited.
  • The grid view. Open a keyword to see its grid, the top 3 at each point, and every check’s summary — the share of points in the top 3, and your average position where you’re found.
  • New stat cards. In the Pack and Map Top 3 join the page, and reports gain Map Top 3 Coverage and Avg. Map Position widgets.
  • Weekly by default. A check is one Maps search per keyword per point, so new projects check Local SEO weekly, like GEO.
  • Paid results are excluded from positions, and a position past 20 reads as not found.
New projects no longer copy their keywords into Local SEO — the page starts by asking for your listing. Locations created before listings existed keep their keywords and history, and are checked once for the whole area until you pick their listing.API and MCP. New endpoints under /v1/projects/{projectId}/local/places list, find, add, update and remove locations; POST /local/keywords takes a place_id and up to 10 keywords; GET /local/keywords/{keywordId}/grid returns a keyword’s grid. The MCP server gains list_local_locations, search_local_listings, add_local_location, remove_local_location and get_local_grid, and now registers 93 tools.
Notifications

Email is on by default

Email notifications were effectively off for every organization: nothing ever switched them on. Email is now on for every organization until an owner or admin turns it off. Slack and Discord stay opt-in. See Notification preferences.
  • Scheduled reports are always emailed to the recipients their automation names, whatever the Email switch says.
  • One notification per ranking alert type, so turning off Rank Improved silences only improvements.
  • One notification per backlink change — backlinks dropped 20%+, referring domains down 10%+ or up 50%+, and domain rank down 50+ points. The New Backlinks and Usage Limit Warning toggles are gone; nothing sent them.
  • Ranking alerts stay unread after being notified, until you open them.
  • Local SEO notifications report the grid: keywords checked, points where you were found, and the top-3 share.
  • Webhook URLs are checked. Slack and Discord accept only the channel’s own HTTPS incoming webhook, and members see the URL masked.
Fixes across the platform

Rank tracking

  • The same keyword can be tracked in several markets — location, language or search engine — as separate keywords with their own history.
  • Editing a tracked keyword is gone; it never saved most of its fields. Pause, resume and remove remain, and to change market you add it again.
  • The AI Overview summary describes the newest check rather than counting every overview ever seen.

Site audits

  • With Render JavaScript on, each page crawled costs 4 pages of the site audit allowance. See Run an audit.
  • A crawl that reads no pages now fails with an explanation instead of scoring 100.
  • Duplicate title and description issues are counted once per page.
  • Noindex page is now Nofollow page — it detects the robots nofollow directive. The crawl data has no noindex signal, so the old name described something it couldn’t see.

Domain analysis

  • Top Keywords are the domain’s highest-traffic keywords, with position, URL and traffic.
  • Top Pages drop the backlink column, which the data source never filled, and add Traffic value.
  • Competitors show whole-site keywords and traffic, plus common keywords and average position. The Rank column is gone.
  • The backlink gap takes at most four competitors.
  • Domain inputs — domain analysis, gap competitors, project competitors — accept a URL and reduce it to the domain, in the API and MCP as well.
  • Tech stack categories are the data source’s own, grouped by type. Versions and confidence aren’t provided, so they’re no longer shown.
  • A refresh keeps showing the last completed profile while it runs, and if it fails.
  • A profile where every section failed is marked failed; one missing some sections says which.
  • Competitor backlink totals cover your five oldest competitors, refreshed weekly. Your own domain follows its schedule.

Everything else

  • A new project’s first run also fetches the full backlink profile — about five research lookups in all, not four.
  • GEO topics get their AI volume filled on every snapshot.
  • Web vitals has a Mobile/Desktop toggle, and accepts a page without https://.
  • The MCP tool get_ai_visibility_overview returns the GEO summary — averages and the daily trend over days, default 30 — instead of raw snapshots.
  • The sample project now includes a Weekly Overview report and a Local SEO location with its grids.