# Search Console and Bing (/search-console)



Peeko's own tracker sees people who arrive. It cannot see the search results they did not click, so
impressions, average position and the words they typed have to come from the search engines
themselves. Connect one or both, and the **Search** tab fills in.

Both connections are read only and the token behind each is encrypted. Unlinking a site deletes that
site's stored search data on the spot; the connection itself, and the token it holds, live until you
disconnect it. Nothing about a connection changes what Peeko collects on your site.

## Connect Google Search Console [#connect-google-search-console]

Open the site, then **Settings**, and find the **Google Search Console** card.

1. **Connect Google.** You land on Google's own consent screen. Peeko asks to read Search Console
   and to see your email address, which is what the card shows you afterwards as the connected
   account. It cannot change anything in Search Console, and it asks for nothing else in your Google
   account.
2. **Pick the property.** Peeko lists the properties that account can actually read and preselects
   the one that matches the site's domain. A domain property counts every address and subdomain
   together; a URL prefix property counts only that exact address, so pick the domain property when
   you have one.
3. **Link.** The last twenty eight days arrive while you wait. The rest, up to sixteen months, is
   fetched in the background immediately after, so the tab is never empty on its first visit.

Peeko offers only the properties the account can read the search analytics of, which in Search
Console's own vocabulary means Owner or Full access. A **Restricted** user, or one who has not
verified the property, sees it in Google's list and gets zeros back from the API, so offering it
would be offering a link that silently reports nothing.

## Connect Bing Webmaster Tools [#connect-bing-webmaster-tools]

The **Bing Webmaster Tools** card sits under the Google one, and works the same way.

1. **Connect Bing.** Bing's consent screen asks for its read only webmaster scope. Bing returns no
   email address with a grant, so there is no account to name anywhere: the site's card simply links
   you to your account page, where the connection date and the number of sites reading through it
   live.
2. **Pick the site.** Bing has no domain property. A single site can be verified in Bing as up to
   four separate entries, `http` and `https` times bare and `www`, and each one reports only the
   traffic to that exact address. Peeko preselects the `https` one when it can and explains the
   choice when there is more than one.
3. **Link.** Bing's API takes no date arguments, so everything it holds arrives in three requests
   while you wait. There is no backfill to schedule. A site Bing has nothing for yet links
   successfully and shows an empty window, which is a completed sync rather than a failure.

Two kinds of entry are held back from matching. A site Bing has not verified can never be linked. A
site verified at a subfolder, such as `https://example.com/blog/`, is linkable but is never
preselected: it reports one folder's traffic, so choosing it has to be deliberate.

Both appear under a **Show all sites** toggle, which Peeko offers when **nothing** on the account
matches the domain. When something does match, the picker lists the matches and nothing else.

## Who can connect, and what it covers [#who-can-connect-and-what-it-covers]

A connection belongs to **you**, not to the team, and you get one per search engine. Any member of
the team can connect their own account and link a site with it. Unlinking is open to the team owner
and to whoever linked the site. Disconnecting an account unlinks every site that read through it and
deletes their data in the same step.

If the person who linked a site leaves the team, the tab says so and asks for the link to be made
again. It is a banner and not a wipe: the site keeps reading through that departed member's stored
grant until somebody relinks or unlinks it, because silently cutting a team's search data off the
day somebody leaves would be the worse surprise.

## Reading the Search tab [#reading-the-search-tab]

The tab has the same shape for both engines: four tiles, a daily chart of clicks and impressions,
one card of breakdowns and one card of insights. When a site is linked to both, a **Google** and
**Bing** control appears at the top, and the choice travels in the address as `?provider=bing`, so a
link to a Bing view stays a Bing view when you send it to somebody or change the range.

| Tile        | What it counts                                                           |
| ----------- | ------------------------------------------------------------------------ |
| Clicks      | Somebody clicked through to your site from a result.                     |
| Impressions | A page of yours appeared in the results.                                 |
| CTR         | Clicks divided by impressions, as a percentage.                          |
| Position    | Your average rank, weighted by impressions. Lower is better: 3 beats 12. |

Each tile compares the window against the equal window immediately before it, so 7 days is measured
against the 7 days before that.

The breakdown card lists the top fifty rows per dimension. Google breaks its numbers down four ways,
**Queries**, **Pages**, **Countries** and **Devices**. Bing's API offers no country or device data at
all, so the Bing view shows two, and the missing panels are absent rather than empty: an empty panel
would be a claim that Bing sent nothing this window, which is a different and untrue statement.

The insights card holds three views of the query list, ten rows each.

* **Winners** and **Losers**: the queries that gained and lost the most clicks against the previous
  window.
* **Opportunities**: queries ranking between 8 and 20 with at least 50 impressions. Real demand,
  just off the first page.

Winners and Losers need something to compare against, so they are hidden for the `all` range, which
has nothing before it, and whenever Peeko's data does not reach back through the whole of the
previous window yet. The tab says which of the two it is.

## The windows are not your dashboard's window [#the-windows-are-not-your-dashboards-window]

Search data is late, and the two engines are late in different ways. Neither window is the site's own
time zone either: both are stored as the engine's own days, which is Pacific time.

* **Google** publishes about three days behind, so a Google window ends three days ago, every day.
* **Bing** publishes on no schedule at all, so a Bing window ends on the latest day Bing has actually
  reported, which may be further back. Peeko reads that date from what it has stored rather than
  guessing at a lag.

Both tabs print the end date in a sentence under the tiles. `Today` and `Last 24 hours` are served as
7 days on this tab, because no search data that recent exists for either engine, and a custom range
is clamped to the days that exist rather than refused.

### Bing's lists are weekly [#bings-lists-are-weekly]

This is the one thing that surprises people. Bing's totals are daily, and its query and page rows
arrive in **weekly buckets, each dated to the Friday its week ended on**. So a 7 day window holds one
bucket and compares it against one bucket, and a window shorter than a week can hold no bucket at
all, in which case the query list is empty and the Position tile reads as not known. That is an
absence of rank data for those days, not a rank of zero.

It also means Bing's Position tile is computed differently from Google's. Bing reports no rank
alongside its daily totals, so Peeko takes the impression weighted mean of the weekly query buckets
the window covers.

One more thing about that number. Bing reports positions in tenths and Peeko divides by ten; the
first production connection verifies this. Microsoft documents neither the unit nor the scale, so
read a Bing rank as directional until then.

## How often it refreshes [#how-often-it-refreshes]

Nothing is scheduled. Opening the Search tab, or asking for search numbers over MCP or the command
line, checks how old the stored copy is and refreshes it behind the response if it is stale. Google
is refreshed at most every six hours and its three most recent days are pulled again every time,
because Google revises them. Bing is refreshed at most once a day, because its API hands back its
whole window on every call and the query rows only move weekly anyway.

A site nobody opens does not sync, and nothing is lost by that: the gap fills on the next visit.

When a refresh fails, the numbers you were already shown stay on the screen and a line says the last
try did not work. Peeko tells the failures apart, because they need different things from you. A
grant you withdrew asks you to reconnect. A rate limit or an outage simply tries again later. And
Google has a third kind that Bing does not: the connected Google account can lose its access to that
one property, which is nothing to wait for. Check its access in Search Console, or unlink and link
the property again.

## What Peeko keeps, and what a query row is missing [#what-peeko-keeps-and-what-a-query-row-is-missing]

Peeko stores the rows the engine returns for the sites you linked, for sixteen months, and an
encrypted token that lets it refresh them. It keeps the top five hundred rows per dimension per
bucket, by clicks and then impressions, which is per day for Google and per weekly bucket for Bing.
So "every keyword you have ever ranked for" is not on offer from either engine.

Google drops rare queries it cannot anonymize. Its query rows therefore always add up to **less**
than the Clicks and Impressions tiles for the same window, and the difference is not missing data,
it is Google protecting the people who typed them.

## Unlinking, disconnecting, and what that deletes [#unlinking-disconnecting-and-what-that-deletes]

Unlinking a site deletes every stored row for that site and that engine in one step, and leaves the
other engine untouched. Disconnecting the account does the same for every site on the connection and
deletes the stored token with it.

Disconnecting Google also tells Google to revoke the grant. **Bing documents no revocation
endpoint**, so disconnecting Bing deletes Peeko's copy of the data and the token it held, and that is
all Peeko can do. Removing Peeko's access on Bing's side is yours to do, in Bing Webmaster Tools
under Settings, API Access. Peeko's confirmation says so rather than letting you assume otherwise.

## The same numbers elsewhere [#the-same-numbers-elsewhere]

* The Sources card on the dashboard gains a **Google search** or **Bing search** row once a site is
  linked, so search sits beside your other referrers. It is an owner's row, and it steps out whenever
  the range you asked for is not a range search data can answer, which is `Today`, `Last 24 hours`
  and a custom window that had to be clamped.
* [The command line](/cli) reads either engine: `search` and `queries` take `--provider google` or
  `--provider bing`.
* [MCP](/mcp) does the same through `get_search_summary` and `get_search_queries`, which take a
  `provider` argument and report which engine answered.

With one engine linked, leaving the choice out picks that one. With both, it is Google.
